MySQL八小時(shí)問(wèn)題指的是,在MySQL的默認(rèn)設(shè)置下,如果一個(gè)連接在八小時(shí)內(nèi)沒有任何操作,那么它會(huì)被自動(dòng)關(guān)閉。這意味著,如果一個(gè)應(yīng)用程序持續(xù)不斷地向MySQL服務(wù)器發(fā)送請(qǐng)求,但每個(gè)請(qǐng)求之間的時(shí)間間隔超過(guò)了八小時(shí),那么該應(yīng)用程序?qū)o(wú)法完成其任務(wù)。
// MySQL連接參數(shù) $db_host = "localhost"; $db_user = "username"; $db_pass = "password"; $db_name = "database_name"; // 建立連接 $conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name); // 設(shè)置字符集 mysqli_set_charset($conn, 'utf8'); // 執(zhí)行查詢語(yǔ)句 $sql = "SELECT * FROM users WHERE name='John'"; $result = mysqli_query($conn, $sql); // 處理查詢結(jié)果 if (mysqli_num_rows($result) >0) { while($row = mysqli_fetch_assoc($result)) { echo "Name: " . $row["name"]. " - Email: " . $row["email"]. "
"; } } else { echo "0 results"; } // 關(guān)閉連接 mysqli_close($conn);
解決這個(gè)問(wèn)題的方法很簡(jiǎn)單:可以通過(guò)修改MySQL的配置文件來(lái)延長(zhǎng)未操作連接的生命周期。在MySQL的配置文件中,可以通過(guò)設(shè)置wait_timeout參數(shù)來(lái)控制未操作連接的生命周期。例如,將wait_timeout設(shè)置為86400(即24小時(shí))可以讓一個(gè)連接在未操作的情況下保持24小時(shí)的存活時(shí)間。
在PHP中,可以使用mysqli_ping()函數(shù)來(lái)檢查一個(gè)MySQL連接是否仍然處于活動(dòng)狀態(tài)。如果連接已經(jīng)斷開,該函數(shù)將返回false,可以在這種情況下重連到MySQL服務(wù)器。