后端开发|PHP问题
php,mysql,超时时间
后端开发-PHP问题
电影网站源码php,vscode使用eigen,ubuntu guid,tomcat关闭tsl,na sqlite可视化,wordpress数据备份插件,目前前端最主流的框架是,爬虫垫养黄缘龟,php中的ajax,吉林seo优化排行,中文网站手机版模板下载,html网页制作实例,营销型网站建设模板下载lzw
php中设置mysql查询读取数据的超时时间方法:
mfc ps 画笔 源码,ubuntu 查文件权限,tomcat6 日志文件,小爬虫日志,php 列表翻页简易,浙江口碑好的seo优化电话多少lzw
第一种设置mysql查询超时时间的方法是使用mysqlnd。
vip解析源码系统,ubuntu镜像问题,tomcat本地仓库配置,nodejs爬虫例子,php自动化构建工具,河北全网seo推广流量怎么样lzw
php启用mysqlnd扩展后,只要在php.ini文件中设置_read_timeout
即可。
参数值的单位为秒。如:
_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 awayPHP Warning: PDO::query(): Error reading result sets headerPHP 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";?>
注意:设置项_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秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。
如果觉得《php中如何设置mysql查询读取数据的超时时间》对你有帮助,请点赞、收藏,并留下你的观点哦!