【发布时间】:2015-12-04 22:52:19
【问题描述】:
我们同时收到 PDOException 和警告。这些警告快把我们逼疯了。
警告:PDOStatement::execute(): MySQL server has gone away in /home/Database.php on line 120
警告:PDOStatement::execute():在第 120 行的 /home/Database.php 中读取结果集的标头时出错
这是执行此操作的代码 -- 这只是为了模拟连接消失:
$db = new PDO('mysql:dbname=' . $name . ';host=' . $host, $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$statement = $db->prepare('SET SESSION wait_timeout = 1');
$statement->execute();
sleep(3);
try {
$statement = $db->prepare('SELECT 1');
$statement->execute();
} catch (PDOException $e) {
echo 'Exception! Err #:' . $e->errorInfo[1] . PHP_EOL;
}
编辑:问题是为什么这会产生警告和异常。即使我们明确告诉 PDO 抛出异常,上面的代码也会生成两者。
上面的代码比等待我们的服务器默认的 wait_timeout 更快。
编辑 2:我不确定为什么关闭。问题是为什么无论 PDO 错误级别如何,PHP 都会产生警告和异常?
【问题讨论】:
-
那么问题是什么?
-
为什么还要设置会话超时?你想通过这样做解决什么问题?您解释了症状,但没有解释导致问题的实际行为。你也没有解释你想要做什么。我需要知道这一点。
-
这不是那个问题的重复。我在问为什么无论 ATTR_ERRMODE 设置为 ERRMODE_EXCEPTION 为何都会出现警告和异常。
-
这不是重复的。 5 个人错了。