插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”
介绍:
将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。
解决方案:
解决此错误的关键是调整wait_timeout 和 Interactive_timeout 变量。这些变量控制 MySQL 在终止非活动连接之前等待的最长时间。
调整超时变量:
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);
// 更新 - 这也是需要的
$results = $db->query("SET session Interactive_timeout=28800", FALSE);
$results = $db->query("显示变量如'%timeout%'", TRUE);
回显“”;
var_dump($结果);
回显“”;
类数据库{
公共 $mysqli;
公共函数 __construct() {
$this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
如果(mysqli_connect_errno()){
出口();
}
}
公共函数 __destruct() {
$this->disconnect();
取消设置($this->mysqli);
}
公共函数断开(){
$this->mysqli->close();
}
函数查询($q,$结果集){
/* 创建准备好的语句 */
if (!($stmt = $this->mysqli->prepare($q))) {
echo("SQL 错误: " . $q . ' SQL 错误 #: ' . $this->mysqli->errno . ' - ' . $this->mysqli->error);
返回假;
}
/* 执行查询 */
$stmt->execute();
if ($stmt->errno) {
echo("SQL 错误: " . $q . ' SQL 错误 #: ' . $stmt->errno . ' - ' . $stmt->error);
返回假;
}
if ($结果集) {
$result = $stmt->get_result();
for ($set = array(); $row = $result->fetch_assoc();) {
$set[] = $row;
}
$stmt->close();
返回 $set;
}
}
}其他注意事项:
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3