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

如何设置php中MySQL查询读取数据的超时时间?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

创新互联-专业网站定制、快速模板网站建设、高性价比奉节网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式奉节网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖奉节地区。费用合理售后完善,10余年实体公司更值得信赖。

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 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的返回值做下判断,修改后的代码如下:

<?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中mysql查询读取数据的超时时间问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。

网页标题:如何设置php中mysql查询读取数据的超时时间
分享URL:https://www.cdcxhl.com/article6/gjphog.html

成都网站建设公司_创新互联,为您提供虚拟主机手机网站建设标签优化微信小程序全网营销推广网站内链

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营