Jeg vil vove at sige, at problemet er med wait_timeout
. Den er indstillet til 30 sekunder på min delte vært, og på min lokale vært er den indstillet til 28800.
Jeg fandt ud af, at jeg kan ændre det for sessionen, så du kan sende forespørgslen:SET session wait_timeout=28800
OPDATERING OP besluttede, at han også skulle ændre variablen interactive_timeout
såvel. Dette kan være nødvendigt for alle.
Koden nedenfor viser indstillingen før og efter ændringen for at bekræfte, at den er blevet ændret.
Så indstil wait_timeout=28800 (og interactive_timeout =28800) i begyndelsen af din forespørgsel og se, om den fuldføres.
Husk at indsætte dine egne db-legitimationsoplysninger i stedet for DB_SERVER, DB_USER, DB_PASS, DB_NAME
OPDATERING Hvis dette virker, vil du også gerne være klar over, hvad du laver, ved at indstille wait_timeout højere. At indstille den til 28800 er 8 timer og er meget.
Følgende er fra dette websted . Det anbefaler at indstille wait_timeout til 300 - som jeg vil forsøge og rapportere tilbage med mine resultater (efter et par uger).
<?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;
}
}
}