PHP/PDO -服务器已经消失和异常


PHP/PDO - Server has gone away and Exceptions

我正在尝试制作一个具有持久连接的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(...