Wie kann ich eine PDO -MySQL -Verbindung auf Fehler überprüfen, bevor ich eine Abfrage ausführe?

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

  •  27-10-2019
  •  | 
  •  

Frage

Meine Skripte werden in vielen verschiedenen Funktionen mit gegabelten Prozessen ziemlich durchsetzt. Wann immer pcntl_fork() Es wird genannt, alle MySQL -Verbindungen gehen verloren. Wenn ich eine Abfrage auf einer PDO MySQL -Verbindung ausführe, erhalte ich den Fehler "MySQL server has gone away".

Das Problem ist, dass dieser Fehler nur in angezeigt wird PDO::errorinfo() Nach einer fehlgeschlagenen Abfrageausführung. Ich möchte erkennen können, ob der MySQL -Server "verschwunden ist", bevor ich versuche, eine Abfrage auszuführen. Auf diese Weise konnte ich eine PDO -Wrapper erstellen, die in solchen Situationen eine neue Verbindung für mich herstellt.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich gebe Ihnen 2 Methoden mit Beispiel (in gewisser Weise ähnlich):
Beispiel 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().'. ';
        }
    }
}

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

Andere Tipps

Zu Ihrer Information: Dies wurde mehrmals als Fehler gemeldet 1,2,3 Ohne Fix bisher (5.3.14). Die einzig

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top