首頁  >  文章  >  後端開發  >  php中如何設定mysql查詢讀取資料的逾時時間

php中如何設定mysql查詢讀取資料的逾時時間

coldplay.xixi
coldplay.xixi原創
2020-07-27 16:28:183783瀏覽

php中設定mysql查詢讀取資料的逾時時間方法:1、使用mysqlnd設定mysql查詢逾時時間,程式碼為【mysqlnd.net_read_timeout =3】;2、使用mysqli進行限制read的逾時時間。

php中如何設定mysql查詢讀取資料的逾時時間

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秒,不會低於這個值,對於大部分應用來說可以接受,但是對於小部分應用需要最佳化。

相關學習推薦:PHP程式設計從入門到精通

#

以上是php中如何設定mysql查詢讀取資料的逾時時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn