確認方法を教えてください、PDO MySQLの接続エラーの前を走ってますクエリー?

StackOverflow https://stackoverflow.com/questions/6832190

  •  27-10-2019
  •  | 
  •  

質問

私のスクリプトにかなりriddledとフォプロセスに多くの異なる。き pcntl_fork() と呼ばれ、すべてのMySQLの接続は失われます。がしかったクエリにPDO MySQLの接続を取得します。エラー "MySQL server has gone away".

問題はこのエラーみたちのクリスマスの過ごし方 PDO::errorinfo() 後に失敗したクエリを実行します。すればよいのでしょうかを検出できる場合、MySQLサーバ"にすることができます。"前のようにしている行を返します。そのように私のようなPDOラッパーが新しい接続機会がほとんど無かったな。

そのアイデア?

役に立ちましたか?

解決

ただ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().'. ';
        }
    }
}

例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();

他のヒント

参考:このことが報告されているバグを複数回 1,2,3 無修正で(5.3.14).の唯一のソリューションでは、新しい接続の各時間後分岐子供になりますので、PDO::ATTR_PERSISTENT=>false

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top