Как я могу проверить соединение PDO с MySQL на наличие ошибок ПЕРЕД выполнением запроса?
Мои сценарии становятся довольно запутанными с разветвленными процессами во множестве различных функций. Всякий раз, когда вызывается pcntl_fork()
, все соединения MySQL теряются. Если я выполняю запрос по подключению PDO MySQL, я получаю сообщение об ошибке "MySQL server has gone away"
.
Проблема в том, что эта ошибка появляется только в PDO::errorinfo()
после неудачного выполнения запроса. Я хотел бы иметь возможность определить, "исчез" ли сервер MySQL, прежде чем пытаться выполнить запрос. Таким образом, я мог бы создать оболочку PDO, которая установит для меня новое соединение в таких ситуациях.
Есть идеи?
6
2 answers
Я приведу вам 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();
2
Author: Ka., 2011-07-31 09:30:54