需要注意的是,mysql_ping() 似乎会重置服务器上的错误消息。
我使用它来检查连接是否仍然有效,然后再通过 mysql_error() 读取错误消息,它始终返回空字符串。 删除连接检查后,一切正常。
(PHP 4 >= 4.3.0,PHP 5)
mysql_ping — Ping 服务器连接或在没有连接的情况下重新连接
此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中移除。 应改用 MySQLi 或 PDO_MySQL 扩展。 另请参见 MySQL:选择 API 指南。 此函数的替代方法包括
检查与服务器的连接是否有效。 如果连接已断开,则会尝试自动重新连接。 此函数可用于长时间处于空闲状态的脚本,以检查服务器是否已关闭连接并在必要时重新连接。
注意:
在 MySQL >= 5.0.3 版本中,默认情况下自动重新连接被禁用。
link_identifier
MySQL 连接。 如果未指定链接标识符,则假定为 mysql_connect() 打开的最后一个链接。 如果找不到此类链接,它将尝试创建链接,就像 mysql_connect() 已使用不带参数的方式调用一样。 如果找不到或建立连接,则会生成 E_WARNING
级别的错误。
示例 #1 一个 mysql_ping() 示例
<?php
set_time_limit(0);
$conn = mysql_connect('localhost', 'mysqluser', 'mypass');
$db = mysql_select_db('mydb');
/* 假设此查询将花费很长时间 */
$result = mysql_query($sql);
if (!$result) {
echo '查询 #1 失败,退出。';
exit;
}
/* 确保连接仍然有效,如果无效,则尝试重新连接 */
if (!mysql_ping($conn)) {
echo '连接已断开,在查询 #1 后退出。';
exit;
}
mysql_free_result($result);
/* 因此连接仍然有效,让我们运行另一个查询 */
$result2 = mysql_query($sql2);
?>
需要注意的是,mysql_ping() 似乎会重置服务器上的错误消息。
我使用它来检查连接是否仍然有效,然后再通过 mysql_error() 读取错误消息,它始终返回空字符串。 删除连接检查后,一切正常。
mysql_ping() 在遇到以下烦人的错误时非常有用:
MYSQL 错误 2006 服务器已断开
对于 CI 用户
在 1.7.2 版本的 CodeIgniter 中,有一个函数:
$this->db->reconnect()
它使用 mysql_ping() 来重新建立超时连接。
此函数在开发使用数百个数据库连接的社交媒体网站时特别有用,例如插入或选择。
当检查 $resource 是否有效时...
请做好准备,只要 $resource 不是正确的 mysql 资源,mysql_ping 就会返回 NULL。
<?php
$resource =NULL;
var_dump = @mysql_ping($resource);
# 显示 NULL
?>
这可以用于确定当前的 $resource 是 mysql 还是 mysqli 连接,当没有其他方法可以做到这一点时...
在 php 5.1.2 和 mysql 5.0 下使用 mysql_ping 命令时,我遇到了自动重新连接“功能”的问题,主要是连接断开时,mysql_ping 不会自动重新建立与数据库的连接。
当没有查询的时间超过 my.cnf 中的 wait_timeout 值时,与 DB 的连接会断开。 你可以通过运行查询“SHOW VARIABLES;”来检查你的 wait_timeout。
如果在连接断开时遇到自动重新连接问题,请使用以下代码:
<?php
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
if (!mysql_ping ($conn)) {
// 这里的主要技巧是,你必须关闭连接(即使它目前不起作用),才能让它正确地重新创建。
mysql_close($conn);
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
}
// 运行查询,确保连接有效....
?>
重要的是要记住,如果你的第一个 mysql 连接不起作用,mysql_ping 将始终返回 true! 因此,如果你想检查 mysql 是否已连接,首先必须检查 mysql_connect 是否没有返回 false,然后才能开始检查 mysql_ping。