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()
在任何语句失败时抛出异常?
请注意,我目前没有明显更好的选择在自己的exec()
调用中运行每个查询,因为我正在编写一个读取SQL转储文件的工具.