[英]How can I check a PDO MySQL connection for errors BEFORE I run a query?
我的脚本在很多不同的功能中都充满了分叉的进程。 每当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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.