十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
php中设置mysql查询读取数据的超时时间方法:1、使用mysqlnd设置mysql查询超时时间,代码为【mysqlnd.net_read_timeout =3】;2、使用mysqli进行限制read的超时时间。
十载的额尔古纳网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整额尔古纳建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“额尔古纳网站设计”,“额尔古纳网站推广”以来,每个客户项目都认真落实执行。
php中设置mysql查询读取数据的超时时间方法:
第一种设置mysql查询超时时间的方法是使用mysqlnd。
php启用mysqlnd扩展后,只要在php.ini文件中设置mysqlnd.net_read_timeout
即可。
参数值的单位为秒。如:
mysqlnd.net_read_timeout = 3
表示每次mysql查询超时时间为3秒。如果超时,则会报错。
如下面的代码:
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 away PHP Warning: PDO::query(): Error reading result set's header PHP Fatal error: Call to a member function fetch() on a non-object
由于出现了PHP Fatal error错误,导致fetch()之后的代码将无法执行。
因此代码需要对query的返回值做下判断,修改后的代码如下:
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的超时时间。
示例代码如下:
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秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。