【发布时间】:2016-07-20 09:46:36
【问题描述】:
我正在研究以只读模式运行 MySQL 对我的代码的影响。我正在运行 MySQL 5.5.49.0 和 PHP 5.5.9.1(在 Ubuntu 14.04 上)。我使用以下命令将数据库设置为只读:
flush tables with read lock;
set global read_only = 1;
如果我通过 CLI 连接并尝试插入,我会得到:
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
如果我通过 PDO 与同一用户连接:
$pdo = new PDO('mysql:dbname=database;host=host', 'username', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
try {
$result = $pdo->exec('insert ***');
die(var_dump(__LINE__, $result));
} catch (Exception $e) {
die(var_dump(__LINE__, $e->getMessage()));
}
浏览器不断加载。我尝试了一个具有良好旧 mysql_connect 和 mysql_query 的类似构造,在这种情况下,忽略只读情况并返回 0。也不是一个可行的解决方案。
如果数据库在只读模式下运行,我宁愿不检查先发制人,因为通常情况并非如此,因此我可以为每个请求保存一个额外的查询。
所以我的问题是:如何从 Mysql/PDO 获得任何其他形式的异常或警告?
【问题讨论】:
-
这是
PDOException不是Exception -
这并不重要,因为它是一个RuntimeException 的实例,它是一个Exception 的实例。甚至他们的执行也应该以空白页停止。