我正在尝试制作一个具有持久连接的php + pdo网站。当然,连接每8小时关闭一次,所以我尝试创建一个php文件,在连接关闭时重新打开
下面是我的代码: try{
$db = new PDO("mysql:host=$database_ip;dbname=$database_name", $database_username, $database_password, array(PDO::ATTR_PERSISTENT => true));
}catch(Exception $x){
try{
$db = new PDO("mysql:host=$database_ip;dbname=$database_name", $database_username, $database_password);
}catch(Exception $x){
echo 'Failed database error';
}
}
这表示"如果连接失败,PDO::__construct()将总是抛出PDOException,无论当前设置了哪个PDO::ATTR_ERRMODE。"未捕获的异常是致命的。"
问题是,即使异常被捕获,它仍然是致命的:/
错误如下:
警告: PDO::__construct(): MySQL server has gone away in /path/to/website/MySQL .inc.php on line 3
首先你应该抓住PDOException
其次,您已经尝试重新连接,因此将ATTR_PERSISTENT
设置为FALSE
。
try{
$db = new PDO( '...' ); // array(PDO::ATTR_PERSISTENT => FALSE)
}catch(PDOException $x){
echo 'Caught exception: ', $x->getMessage(), "'n";
try{
//reconnect
$db = new PDO( '...' );
}catch(PDOException $e){
throw new Exception('Failed database error'.$e->getMessage());
}
}
@操作符抑制警告:
$db = @new PDO(...