Very confusing description.
... If it has gone down, an automatic reconnection is attempted
(But the function returns only true or false, so if you have variable say $link = connection resource, it will be an invalid resource)
Then ...
... Note: Since MySQL 5.0.13, automatic reconnection feature is disabled.
OK, if it returns false, I have the chance to reconnect updating my resource variable
$link = reconnect
But I did called the function with $link to do the check, so ...
If no such link is found, it will try to create one as if mysql_connect() was called with no arguments (this are different arguments than automatic reconnection, doesn't it? I think, automatic reconnecting, say to $link, would be with its own arguments previously used to create the connection)
So bad decision about automatic recconection feature disabled ...
At least the function should have the param by reference, so in case it reconnects with a new link_identifier.
bool mysql_ping ( &[resource $link_identifier] )
Or a return value of link_identifier, not true.
if ($link=mysql_ping($link)) {...} else { whatever }
mysql_ping
(PHP 4 >= 4.3.0, PHP 5, PECL mysql:1.0)
mysql_ping — Sprawdza połączenie z serwerem, lub nawiązuje połączenie, jeśli go nie było
Opis
Sprawdza czy połączenie z serwerem działa poprawnie. Jeśli zostało zamknięte, następuje próba ponownego połączenia. Funkcja ta, w skryptach które pozostają długi czas w bezczynności, może służyć do sprawdzenia czy serwer zamknął połączenie i, jeśli zajdzie potrzeba, nawiązania go ponownie.
Informacja: Od wersji MySQL 5.0.13 automatyczne ponawianie połączenia jest wyłączone.
Parametry
- identyfikator_połączenia
-
Połączenie MySQL. Jeśli identyfikator połączenia nie zostanie podany, użyte zostanie ostatnie połączenie otwarte przez mysql_connect(). Jeśli połączenie takie nie zostanie znalezione, funkcja spróbuje nawiązać połączenie tak, jakby wywołana została funkcja mysql_connect() bez argumentów. Jeśli żadne połączenie nie zostanie znalezione lub nawiązane, wygenerowany zostanie błąd poziomu E_WARNING.
Zwracane wartości
Zwraca TRUE jeśli połączenie z serwerem działa poprawnie, w przeciwnym przypadku zwraca FALSE.
Przykłady
Example #1 Przykład użycia mysql_ping()
<?php
set_time_limit(0);
$conn = mysql_connect('localhost', 'mysqluser', 'mypass');
$db = mysql_select_db('mydb');
/* Zakładamy, że wykonanie zapytania zajmie dużo czasu */
$result = mysql_query($sql);
if (!$result) {
echo 'Wykonanie zapytania #1 nie powiodło się, zamykanie.';
exit;
}
/* Upewniamy się, że połączenie jest aktywne, w przeciwnym wypadku ponawiamy je */
if (!mysql_ping($conn)) {
echo 'Połączenie zerwane, zamykanie po zapytaniu #1';
exit;
}
mysql_free_result($result);
/* Jeśli połączenie jest aktywne wykonujemy następne zapytanie */
$result2 = mysql_query($sql2);
?>
mysql_ping
02-Oct-2007 01:10
31-Aug-2007 08:32
When checking if a $resource works...
be prepared that mysql_ping returns NULL as long as $resource is no correct mysql resource.
<?php
$resource =NULL;
var_dump = @mysql_ping($resource);
# showing NULL
?>
This could be used to decide of a current $resource is a mysql or a mysqli connection when nothing else is available to do that...
31-Jul-2006 09:32
When using the mysql_ping command under php 5.1.2 and mysql 5.0, I was having problems with the auto-reconnect "feature", mainly that when the connection was severed, a mysql_ping would not automatically re-establish the connection to the database.
The connection to the DB is dropped when the time without a query excedes the wait_timeout value in my.cnf. You can check your wait_timeout by running the query "SHOW VARIABLES;"
If you're having problems auto-reconnecting when the connection is dropped, use this code:
<?php
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
if (!mysql_ping ($conn)) {
//here is the major trick, you have to close the connection (even though its not currently working) for it to recreate properly.
mysql_close($conn);
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
}
//run queries knowing that your connection is alive....
?>
26-May-2005 01:44
It should be noted that mysql_ping() seems to reset the error message on the server.
I used it to check whether the connection was still alive before reading the error message via mysql_error() and it always returned an empty string. Upon removing the connection check everything worked.
16-Mar-2004 04:35
Is important to remember that if your first connection to mysql don't works, mysql_ping will always return true! So, if you want to check if mysql is connected, first of all you must check if mysql_connect do not returns false and then you can begin to check mysql_ping.
