一般说明
我正在使用websockets(棘轮)开发一个聊天系统。聊天效果很好,但我的数据库类有一些问题。
问题
<?php
Class Database {
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
private $error;
private $stmt;
public function __construct(){
if($this->dbh === null){
$this->reconnect();
}
}
private function reconnect(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
return $this->error;
}
}
/* Execute query */
public function execute(){
try{
return $this->stmt->execute();
}
catch(PDOException $e){
$this->reconnect();
try{
return $this->stmt->execute();
}
catch(PDOException $e){
$this->error = $e->getMessage();
return $this->error;
}
}
}
当然,还有很多类似的方法,但这些方法并不重要。
我遇到的错误如下:
PHP致命错误:uncaughtpdoexception:SQLSTATE[HY000]:一般错误:2006 MySQL服务器在/var/www/clients/client1/web4/web/src/Pdo中消失了。php:43
/var/www/clients/client1/web4/web/src/Pdo.php(43):PDOStatement->执行()
这个错误指向
return $this->stmt->execute();
在
execute()
方法。
-
当我清楚地抓住它的时候?
-
PDO::ATTR_PERSISTENT => false,