This does not work with mysqlnd and is marked as wontfix: https://bugs.php.net/bug.php?id=52561mysqli::ping
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mysqli::ping
Референца за `mysqli.ping.php` со подобрена типографија и навигација.
mysqli::ping
mysqli_ping
класата mysqli_driver
mysqli::ping -- mysqli_ping — Проверува врска со сервер или се обидува повторно да се поврзе ако врската е прекината
Оваа функција е DEPRECATED Користи XML парсер во објект
= NULL
Напиши целосна ознака на елемент
Процедурален стил
Проверува дали врската со серверот работи. Ако е прекината и глобалната опција mysqli.reconnect е овозможена, се обидува автоматско повторно поврзување.
Забелешка: На php.ini поставката mysqli.reconnect се игнорира од страна на mysqlnd драјверот, така што автоматското повторно поврзување никогаш не се обидува.
Оваа функција може да се користи од клиенти кои остануваат неактивни подолго време, за да проверат дали серверот ја затворил врската и да се поврзат повторно доколку е потребно.
Параметри
-
mysql објектот како свој прв аргумент. mysqli Само процедурален стил: А mysqli_connect() or mysqli_init()
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Errors/Exceptions
Ако е овозможено известување за грешки на mysqli (MYSQLI_REPORT_ERROR) и бараната операција не успее, се генерира предупредување. Ако, дополнително, режимот е поставен на MYSQLI_REPORT_STRICT, а mysqli_sql_exception наместо тоа се фрла.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.4.0 |
И двете mysqli::ping() and
mysqli_ping() се сега застарени. На reconnect функцијата не е достапна од PHP 8.2.0, што ја прави оваа функција застарена.
|
Примери
Пример #1 mysqli::ping() example
Напиши целосна ознака на елемент
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
/* check if server is alive */
if ($mysqli->ping()) {
printf ("Our connection is ok!\n");
} else {
printf ("Error: %s\n", $mysqli->error);
}
/* close connection */
$mysqli->close();
?>Процедурален стил
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* check if server is alive */
if (mysqli_ping($link)) {
printf ("Our connection is ok!\n");
} else {
printf ("Error: %s\n", mysqli_error($link));
}
/* close connection */
mysqli_close($link);
?>Горните примери ќе дадат излез:
Our connection is ok!
Белешки од корисници 3 белешки
The behaviour about the option mysqli.reconnect is default set to Off at Debian PHP Packages. So i would recommend to update the first line description about the recommendation at the option mysqli.reconnect. (practice note ;))As jay at grooveshark dot com very helpfully pointed out, the mysqlnd driver which is becoming pretty standard does not obey reconnect commands. If you have a DB wrapper class (which hopefully you do) you can implement your own version of ping() such as:
<?php
class db extends mysqli
{
private $db_host;
private $db_user;
private $db_pass;
private $db_name;
private $persistent;
public function __construct($db_host, $db_user, $db_pass, $db_name, $persistent = true)
{
$this->db_host = $db_host;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
$this->db_name = $db_name;
$this->persistent = $persistent;
parent::init();
parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 1);
@parent::real_connect(($this->persistent ? 'p:' : '') . $this->db_host, $this->db_user, $this->db_pass, $this->db_name);
if ($this->connect_errno)
die("All DB servers down!\n");
}
public function ping()
{
@parent::query('SELECT LAST_INSERT_ID()');
if ($this->errno == 2006)
$this->__construct($this->db_host, $this->db_user, $this->db_pass, $this->db_name, $this->persistent);
}
...
}
$db = new db(DB_HOST, DB_USER, DB_PASS, DB_NAME);
// Some code that potentially takes a really long time to execute goes here
// Ping for safety to try to gracefully reconnect
$db->ping();
// Now we should be able to run queries again
$db->query('SELECT LAST_INSERT_ID()');
?>
If you wanted you could even put "$this->ping();" at the top of db::query() to avoid any explicit reconnection calls but I wouldn't recommend it due to the (slight) overhead of running the cheap "SELECT LAST_INSERT_ID()" query every time prior to running your real intended query. There are probably even cheaper queries to run in favor of "SELECT LAST_INSERT_ID()" but it was the first that came to mind and is cheap enough for most purposes since you shouldn't be calling ping() a whole bunch anyway.