有一個未記錄的選項:MYSQLI_OPT_READ_TIMEOUT。這在理論上類似於 MYSQLI_OPT_CONNECT_TIMEOUT,但應用略有不同。連線逾時僅指定初始 TCP 連線的等待時間。一旦建立連線,逾時便不再適用。然而,讀取逾時是從建立 TCP 連線到收到第一個實際數據包的時間。在某些情況下,可以建立 TCP 連線,但 MySQL 伺服器會無限期地停止,阻止執行返回 PHP。指定讀取逾時可以緩解這種情況,而連線逾時則無法。
如果未定義 MYSQLI_OPT_READ_TIMEOUT 常數,在未定義的情況下,舊版本仍然支援它。您可以在較舊的 PHP 版本中使用以下程式碼自行定義它。
<?php
if (!defined('MYSQLI_OPT_READ_TIMEOUT')) {
define ('MYSQLI_OPT_READ_TIMEOUT', 11);
}
?>
然後,您可以像使用連線逾時一樣使用讀取逾時。請注意,由於這是整個連線過程中兩個不同部分的兩個不同逾時值,因此逾時會累加(例如:10 秒連線逾時 + 10 秒讀取逾時 = 最大可能逾時 20 秒)
<?php
$connection = mysqli_init();
$connection->options(MYSQLI_OPT_CONNECT_TIMEOUT, 10);
$connection->options(MYSQLI_OPT_READ_TIMEOUT, 10);
$connection->real_connect('server', 'user', 'pass', 'database');
?>