MySQL server has gone away - in exactly 60 seconds


What is wrong, when you connect to the DB on the LINE BEFORE THE QUERY, and you still get "MySQL server has gone away"?

check this example code:

mysql_connect("localhost", "xxx", "xxx") or die(mysql_error()); mysql_select_db("xxx") or die(mysql_error()); $sql = mysql_query("SELECT id FROM db"); while ($data = mysql_fetch_assoc($sql)) { $ids[] = $data[id]; } foreach ($ids as $id) { $content = file_get_contents("http://www.id.com/?id=$id"); if (stristr($content, "the id is ok man")) { mysql_connect("localhost", "xxx", "xxx") or die(mysql_error()); mysql_select_db("xxx") or die(mysql_error()); mysql_query("UPDATE db SET status = 'OK' WHERE id = '$id'"); } }

mysql server is gone away, i get that in the foreach loop. BTW i need to connect in the foreachloop, because it may take along time before it finds something to update (like 1-2 minutes), and then for sure i will get mysql server has gone away.

mysql_connect("localhost", "xxx", "xxx") or die(mysql_error()); mysql_select_db("xxx") or die(mysql_error()); $sql = mysql_query("SELECT id FROM db"); while ($data = mysql_fetch_assoc($sql)) { if (!mysql_ping ()) { //here is the major trick, you have to close the connection (even though its not currently working) for it to recreate properly. mysql_close(); mysql_connect("localhost", "xxx", "xxx") or die(mysql_error()); mysql_select_db("xxx") or die(mysql_error()); } $ids[] = $data['id']; $content = file_get_contents("http://www.id.com/?id=$id"); if (stristr($content, "the id is ok man")) { mysql_query("UPDATE db SET status = 'OK' WHERE id = '$id'"); } }



he mysql.connect_timeout option is the reason for this. It's not only used for connect timeout, but as well as waiting for the first answer from the server. You can increase it like this:

ini_set('mysql.connect_timeout', 300); ini_set('default_socket_timeout', 300);
 
 
 
if( !mysql_ping($link) ) $link = mysql_connect("$MYSQL_Host","$MYSQL_User","$MYSQL_Pass", true);

你可能感兴趣的:(MySQL server has gone away - in exactly 60 seconds)