您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php中如何设置mysql查询读取数据的超时时间

2025/9/8 3:29:13发布29次查看
php中设置mysql查询读取数据的超时时间方法:1、使用mysqlnd设置mysql查询超时时间,代码为【mysqlnd.net_read_timeout =3】;2、使用mysqli进行限制read的超时时间。
php中设置mysql查询读取数据的超时时间方法:
第一种设置mysql查询超时时间的方法是使用mysqlnd。
php启用mysqlnd扩展后,只要在php.ini文件中设置mysqlnd.net_read_timeout即可。
参数值的单位为秒。如:
mysqlnd.net_read_timeout = 3
表示每次mysql查询超时时间为3秒。如果超时,则会报错。
如下面的代码:
<?php$dsn = 'mysql:dbname=demo;host=127.0.0.1;port=3306';$user = 'demo';$password = 'demo';$dbh = new pdo($dsn, $user, $password);$dbh->query("set names utf8");$sql = "select sleep(5)";$sth = $dbh->query($sql);$row = $sth->fetch();echo "over";?>
则会报错误:
php warning: pdo::query(): mysql server has gone awayphp warning: pdo::query(): error reading result set's headerphp fatal error: call to a member function fetch() on a non-object
由于出现了php fatal error错误,导致fetch()之后的代码将无法执行。
因此代码需要对query的返回值做下判断,修改后的代码如下:
<?php$dsn = 'mysql:dbname=demo;host=127.0.0.1;port=3306';$user = 'demo';$password = 'demo';$dbh = new pdo($dsn, $user, $password);$dbh->query("set names utf8");$sql = "select sleep(5)";$sth = $dbh->query($sql);if(is_object($sth)){ $row = $sth->fetch();}echo "over";?>
注意:设置项 mysqlnd.net_read_timeout 的级别是php_ini_system。所以在php代码中不能修改mysql查询的超时时间。
另一种方式是使用mysqli。
如果php没有启用mysqlnd,那么可以使用mysqli进行限制read的超时时间。
示例代码如下:
<?php//自己定义读写超时常量if (!defined('mysql_opt_read_timeout')) { define('mysql_opt_read_timeout', 11);}if (!defined('mysql_opt_write_timeout')) { define('mysql_opt_write_timeout', 12);}//设置超时$mysqli = mysqli_init();$mysqli->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";?>
注意:
1. 超时设置单位为秒,最少配置1秒
2. 但mysql底层的read会重试两次,所以实际会是 3 秒
重试两次 + 自身一次 = 3倍超时时间。
那么就是说最少超时时间是3秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。
相关学习推荐:php编程从入门到精通
以上就是php中如何设置mysql查询读取数据的超时时间的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product