【发布时间】:2014-04-23 14:35:09
【问题描述】:
我正在使用 PDO 运行多个查询。如果第二个查询失败,则不会抛出异常。
$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "
DELETE FROM car;
INSERT INTO car(name, type) SELECT name, from FROM vehicle;
";
try {
$db->exec($sql);
}
catch (PDOException $e)
{
echo $e->getMessage();
die();
}
上面的代码执行没有抛出异常。
如何确保所有查询都已成功运行?如何检查哪些查询失败?
附注我正在使用 PDO 多查询来运行 MySQL 转储,但是任何有效的 .sql 文件都应该可以工作。
【问题讨论】:
-
最好的方法是一次运行一个。此外,您的
INSERT查询中存在 SQL 语法错误 -SELECT语句在name,之后需要另一个列名 -
@Kryten 我正在使用 PDO 运行 MySQL 转储。拆分转储是一项艰巨的任务。示例中的错误是故意的。
-
啊,我明白了。在这种情况下,我唯一的建议是检查您的
catch块中的PDOException并查看它是否包含有关失败的特定查询的更多详细信息。从catch块中的print_r($e)开始... -
在 catch 块中放置
print_r($db->errorInfo());会起作用吗? -
问题是没有抛出PDOException。