【发布时间】:2014-07-15 22:04:25
【问题描述】:
PDO::exec() 允许(至少对于某些驱动程序,例如 mysqlnd)一次执行多个语句。
这很好用,当我向PDO::exec() 传递几个查询时,它们都会被执行:
$pdo->exec('DROP TABLE a; DROP TABLE b;');
我的 PDO 实例被配置为抛出异常:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
如果第一个查询失败,它会按预期抛出异常:
$pdo->exec('DROP TABLE does_not_exist; DROP TABLE ok;'); // PDOException
但是当任何后续查询失败时,它会默默地忽略这个事实,你似乎没有办法知道它:
$pdo->exec('DROP TABLE ok; DROP TABLE does_not_exist;'); // no exception
var_export($pdo->errorInfo()); // array (0 => '00000', 1 => NULL, 2 => NULL)
是否有任何方法可以配置 PDO,以便 exec() 在 任何 语句失败时抛出异常?
请注意,由于我正在编写一个读取 SQL 转储文件的工具,因此我目前没有明显更好的选择来在其自己的 exec() 调用中运行每个查询。 p>