Comment résoudre « Erreur générale : le serveur MySQL 2006 a disparu » lors de l'insertion d'enregistrements
Introduction :
L'insertion de données dans une base de données MySQL peut parfois entraîner l'erreur « Erreur générale : le serveur MySQL 2006 a disparu. » Cette erreur se produit lorsque la connexion au serveur est perdue, généralement en raison de l'une des deux variables de la configuration MySQL.
Solution :
La clé pour résoudre cette erreur est d'ajuster les variables wait_timeout et interactive_timeout. Ces variables contrôlent le temps maximum pendant lequel MySQL attendra avant de mettre fin à une connexion inactive.
Ajustement des variables de délai d'attente :
Exemple dans PHP :
query("SHOW VARIABLES LIKE '%timeout%'", TRUE);
echo "";
var_dump($results);
echo "
";
$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 "";
var_dump($results);
echo "
";
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;
}
}
}
";
$results = $db->query("SET session wait_timeout=28800", FALSE);
// MISE À JOUR - ceci est également nécessaire
$results = $db->query("SET session interactive_timeout=28800", FALSE);
$results = $db->query("AFFICHER LES VARIABLES COMME '%timeout%'", TRUE);
echo "Considérations supplémentaires :
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3