PHP Doku:: Ping a server connection or reconnect if there is no connection - function.mysql-ping.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDatenbankerweiterungenAnbieterspezifische DatenbankerweiterungenMySQLMySQL Funktionenmysql_ping

Ein Service von Reinhard Neidl - Webprogrammierung.

MySQL Funktionen

<<mysql_pconnect

mysql_query>>

mysql_ping

(PHP 4 >= 4.3.0, PHP 5)

mysql_pingPing a server connection or reconnect if there is no connection

Beschreibung

bool mysql_ping ([ resource $link_identifier ] )

Überprüft, ob die Verbindung zum Server funktioniert oder nicht. Ist die Verbindung abgebrochen wird ein automatischer Reconnect versucht. Diese Funktion können Sie in PHP-Skripts benutzen, die längere Zeit untätig bleiben, um zu prüfen, ob der Server die Verbindung abgebaut hat oder nicht und im Bedarfsfall wird versucht die Verbindung wieder herzustellen. Rückgabewert: mysql_ping() gibt TRUE zurück, wenn die Verbindung zum Server funktioniert, ansonsten FALSE.

Hinweis:

Ab MySQL 5.0.13 ist die automatische Wiederherstellung der Verbindung deaktiviert.

Parameter-Liste

Verbindungs-Kennung

Die MySQL-Verbindung. Wird die Verbindungskennung nicht angegeben, wird die letzte durch mysql_connect() geöffnete Verbindung angenommen. Falls keine solche Verbindung gefunden wird, wird versucht, eine Verbindung aufzubauen, wie es beim Aufruf von mysql_connect() ohne Angabe von Argumenten der Fall wäre. Falls zufällig keine Verbindung gefunden oder aufgebaut werden kann, wird eine Warnung der Stufe E_WARNING erzeugt.

Rückgabewerte

Gibt TRUE zurück wenn die Verbindung zum MySQL Server noch besteht, ansonsten FALSE.

Beispiele

Beispiel #1 mysql_ping() Beispiel

<?php
set_time_limit
(0);
   
$conn mysql_connect('localhost''mysqluser''mypass');
$db   mysql_select_db('mydb');

/* Annahme: diese Abfrage dauert sehr lange */
$result mysql_query($sql);
if (!
$result) {
    echo 
'Abfrage #1 fehlgeschlagen, aussteigen.';
    exit;
}

/*
Sicherstellen, dass die Verbindung immer noch besteht, falls nicht, Versuch
diese wieder aufzubauen
*/
if (!mysql_ping($conn)) {
    echo 
'Verbindung verloren, Ausstieg nach Abfrage #1';
    exit;
}
mysql_free_result($result);

/* Verbindung besteht noch, absetzen eine einer weiteren Abfrage */
$result2 mysql_query($sql2);
?>

Siehe auch


8 BenutzerBeiträge:
- Beiträge aktualisieren...
Doug
19.04.2010 17:24
This function *does not* attempt to reconnect at this time.  It only tells you whether or not you currently *are* connected.

To actually reconnect, you will have to implement this yourself in a wrapper class.
alext at marketdream dot com dot mx
29.09.2009 17:28
mysql_ping() is really helpful when you have this annoying error:

MYSQL Error 2006 Server has gone away

For CI users:
In 1.7.2 version of codeigniter, there is a function

$this->db->reconnect()

that uses mysql_ping() to reestablish the timed out connection.

This function is specially useful when developing social media sites that uses hundreds of connections to the db such asinserting or selecting.
luky37
3.02.2009 20:15
If you get 'error 2006: MySQL server has gone away' messages when running (really) long scripts, mysql_ping will help detecting the loss of the db-connection. This can happen, when 'wait timeout' is reached (MySQL default is 8 hours).
oscar at bitagenda dot com
2.10.2007 13:10
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 }
miro dot dietiker at md-systems dot ch
31.08.2007 20: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...
dustin hawkins
31.07.2006 21: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....

?>
cybot2000 at yahoo dot de
26.05.2005 1: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.
vinicius at teracom dot com dot br
16.03.2004 16: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.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)