¿Cómo puedo verificar una conexión PDO MySQL para obtener errores antes de ejecutar una consulta?
Pregunta
Mis guiones se están acumulando bastante con procesos bifurcados en muchas funciones diferentes. Cuando sea pcntl_fork()
se llama, todas las conexiones MySQL se pierden. Si ejecuto una consulta en una conexión PDO MySQL, recibo el error "MySQL server has gone away"
.
El problema es que este error solo aparece en PDO::errorinfo()
Después de una ejecución fallida de consulta. Me gustaría poder detectar si el servidor MySQL "se ha ido" antes de intentar ejecutar una consulta. De esa manera podría crear un envoltorio PDO que me haga una nueva conexión en tales situaciones.
¿Algunas ideas?
Solución
Te doy 2 métodos por ejemplo (similar en algunos aspectos):
Ejemplo 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().'. ';
}
}
}
Ejemplo 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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow