您好,欢迎访问一九零五行业门户网

PHP访问MySQL查询超时处理的方法

php连接mysql主要是使用mysql提供的 libmysqlclient 的客户端库,同时也延伸出来 mysql 和 mysqli 两套php的扩展,相对来说 mysqli 比 mysql 更好,更稳定。
目前两个客户端扩展库连接超时可以设置选项来操作,比如mysqli:
代码如下:
options(mysqli_opt_connect_timeout, 5);
//连接
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'world');
//如果超时或者其他连接失败打印错误信息
if (mysqli_connect_errno()) {
printf(connect failed: %s\n, mysqli_connect_error());
exit();
}
//成功输出连接信息
printf (connection: %s\n., $mysqli->host_info);
$mysqli->close();
?>
这个是连接超时,但是有些时候我们需要查询读写超时,比如说我们一个数据库压力很大,或者连接很多,那么数据库查询就很缓慢,但是我希望某些不重要的数据,比如说文章点击数这种如果查询超时了就不显示,至少能够保证主体页面正确显示,但是查遍php手册没有发现这个操作选项或者函数。
手册里只有这么四个选项
跟踪 mysqli 的扩展源代码发现它底层调用的是 libmysqlclient 的 mysql_options:
并且在mysqli的php扩展中就只导出了几个变量:
大概看了一下 libmysqlclient 的代码,发现其实它自带是有读写超时设置的:
因为它自己定义了很多操作选项,只是php扩展里没有:
看看mysql中的读写超时是如何实现的:
代码如下:
options(mysql_opt_read_timeout, 3);
$mysqli->options(mysql_opt_write_timeout, 1);
//连接数据库
$mysqli->real_connect(localhost, root, root, test);
if (mysqli_connect_errno()) {
printf(connect failed: %s\n, mysqli_connect_error());
exit();
}
//执行查询 sleep 1秒不超时
printf(host information: %s\n, $mysqli->host_info);
if (!($res=$mysqli->query('select sleep(1)'))) {
echo query1 error: . $mysqli->error .\n;
} else {
echo query1: query success\n;
}
//执行查询 sleep 9秒会超时
if (!($res=$mysqli->query('select sleep(9)'))) {
echo query2 error: . $mysqli->error .\n;
} else {
echo query2: query success\n;
}
$mysqli->close();
echo close mysql connection\n;
?>
基本上到这里就基本能够解决php在针对mysql读写查询操作超时的处理了,希望对你有帮助。
heiyeluren的blog
其它类似信息

推荐信息