【发布时间】:2013-05-19 21:32:48
【问题描述】:
我在 PHP 脚本中使用 PDO 来执行 SQL 查询。我想用多个查询进行交易并捕获错误。代码是这样的:
try
{
$dbh = new PDO(...);
$dbh-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch
{
...
}
$query1 = 'DO some QUERY';
$query2 = 'DO other QUERY';
try
{
$dbh->beginTransaction();
$dbh->exec($query1);
$dbh->exec($query2);
$dbh->commit();
}
catch
{
...
}
我如何知道是哪个查询导致了错误?我想这样做是因为我想忽略第一个查询的重复键错误,而不是第二个查询,而不使用 SELECT(另请参阅 a previous question of mine 关于 UNIQUE 错误处理)。
【问题讨论】:
-
使用两个不同的 try-catch 块?
-
@user1615903:这就是我现在正在做的事情,但我会使用事务来加快查询速度。
-
两个 try-catch 块如何阻止您使用事务?
-
您可以使用多个 try catch 块并在 catch() 块中打印消息并抛出您自己的异常以在您回滚()事务的另一个块中捕获
-
@user1615903:嗯,你说得对……我想它不能工作,因为我的最后一个 SQL 错误是由 execute() 引起的。
标签: php database exception pdo transactions