在运行查询之前,如何检查PDO MySQL连接是否存在错误?

Hub*_*bro 6 php mysql pdo pcntl

我的脚本在很多不同的功能中都充满了分叉的进程.每当pcntl_fork()调用时,所有MySQL连接都将丢失.如果我在PDO MySQL连接上运行查询,我会收到错误"MySQL server has gone away".

问题是此错误仅在PDO::errorinfo()查询执行失败后显示.在尝试运行查询之前,我希望能够检测MySQL服务器是否"已经消失".这样我就可以创建一个PDO包装器,在这种情况下为我创建一个新的连接.

有任何想法吗?

Ka.*_*Ka. 2

我通过示例给您提供 2 种方法(在某些方面类似):
示例 1:

$sql = 'SELECT count(*) FROM `TABLE`;';
for ($i = 1; $i <= 2; $i++) {
    try {
        $nb = $pdo->query($sql)->fetchColumn();
        if (is_int($nb)) {
            // OK
            break;
        }
    } catch (PDOException $e) {
    //Oups
        if ($i == 1) {
            // First time ? retry
            $pdo = new PDO($dsn, $user, $password);
        } else {
            // Second time, KO
            $nb = "(unknown)";
            echo 'PDO Connection failed: ' . $e->getMessage().'. ';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

示例2:

// check
try {
    $pdo->query('select 1;')
    //OK
} catch (PDOException $e) {
    //Oups => reconnect
    $pdo = new PDO($dsn, $user, $password);
}
// Should be good
$sql = 'SELECT count(*) FROM `TABLE`;';
$nb = $pdo->query($sql)->fetchColumn();
Run Code Online (Sandbox Code Playgroud)