Tôi muốn nói rằng vấn đề là với wait_timeout
. Nó được đặt thành 30 giây trên máy chủ chia sẻ của tôi và trên máy chủ cục bộ của tôi được đặt là 28800.
Tôi thấy rằng tôi có thể thay đổi nó cho phiên, vì vậy bạn có thể đưa ra truy vấn:SET session wait_timeout =28800
CẬP NHẬT OP xác định rằng anh ta cũng cần thay đổi biến interactive_timeout
cũng. Điều này có thể cần hoặc có thể không cần thiết cho tất cả mọi người.
Đoạn mã dưới đây hiển thị cài đặt trước và sau khi thay đổi để xác minh rằng nó đã được thay đổi.
Vì vậy, hãy đặt wait_timeout =28800 (và tương tác_timeout =28800) ở đầu truy vấn của bạn và xem nó có hoàn thành hay không.
Hãy nhớ chèn thông tin đăng nhập db của riêng bạn thay cho DB_SERVER, DB_USER, DB_PASS, DB_NAME
CẬP NHẬT Ngoài ra, nếu điều này có hiệu quả, bạn muốn biết rõ mình đang làm gì bằng cách đặt wait_timeout cao hơn. Đặt nó thành 28800 là 8 giờ và là rất nhiều.
Sau đây là từ trang web này . Nó khuyên bạn nên đặt wait_timeout thành 300 - tôi sẽ thử và báo cáo lại với kết quả của mình (sau vài tuần).
<?php
$db = new db();
$results = $db->query("SHOW VARIABLES LIKE '%timeout%'", TRUE);
echo "<pre>";
var_dump($results);
echo "</pre>";
$results = $db->query("SET session wait_timeout=28800", FALSE);
// UPDATE - this is also needed
$results = $db->query("SET session interactive_timeout=28800", FALSE);
$results = $db->query("SHOW VARIABLES LIKE '%timeout%'", TRUE);
echo "<pre>";
var_dump($results);
echo "</pre>";
class db {
public $mysqli;
public function __construct() {
$this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
if (mysqli_connect_errno()) {
exit();
}
}
public function __destruct() {
$this->disconnect();
unset($this->mysqli);
}
public function disconnect() {
$this->mysqli->close();
}
function query($q, $resultset) {
/* create a prepared statement */
if (!($stmt = $this->mysqli->prepare($q))) {
echo("Sql Error: " . $q . ' Sql error #: ' . $this->mysqli->errno . ' - ' . $this->mysqli->error);
return false;
}
/* execute query */
$stmt->execute();
if ($stmt->errno) {
echo("Sql Error: " . $q . ' Sql error #: ' . $stmt->errno . ' - ' . $stmt->error);
return false;
}
if ($resultset) {
$result = $stmt->get_result();
for ($set = array(); $row = $result->fetch_assoc();) {
$set[] = $row;
}
$stmt->close();
return $set;
}
}
}