一次尝试使用更多查询的有效性?

时间:2013-01-22 10:51:58

标签: php try-catch

有效使用例如在一个try-catch块中进行两次查询?

try
{
   $query1 = prepare("SELECT * FROM tbl1...");
   $query2 = prepare("SELECT * FROM tbl2...");
   $query1 = execute();
   $query2 = execute();
}catch (PDOException $e)
{
   print "Error!: " . $e->getMessage();
   return false;
}

或者,它应该是:

try
{
   $query1 = prepare("SELECT * FROM tbl1...");
   $query1 = execute();
}catch (PDOException $e)
{
   print "Error!: " . $e->getMessage();
   return false;
}


try
{
   $query2 = prepare("SELECT * FROM tbl2...");
   $query2 = execute();
}catch (PDOException $e)
{
   print "Error!: " . $e->getMessage();
   return false;
}

如果两种方法都被接受并且在使用中它们之间是否存在差异? (速度?) 因为我必须在索引中进行更多查询,但我不想查看所有

5 个答案:

答案 0 :(得分:2)

这两种方法都被接受,但第一种方法更具可读性。一组try catch用于同一组功能就足够了。

如果您的某个调用失败,它将停止执行bloc并直接转到catch,因此将所有调用放在同一个try中。

我怀疑在第二种方式中,编译器可能会认为两个catch中的代码是相同的,并将其优化为第一个,但应该尝试这个。

答案 1 :(得分:2)

如果您根据哪个命令失败需要不同的行为,那么您需要将每个(一对)命令包装在他们自己的try/catch块中。

如果你担心的是从任何行发生某些错误,那么你可以将所有命令包装在一起并处理所有异常。

答案 2 :(得分:2)

两者都完全有效。正如其他人所说的那样,只是用例。

我想要添加的唯一内容是您可能还想使用交易。这样,如果第二个查询失败,您可以回滚。请注意,这也取决于用例。

答案 3 :(得分:1)

这与你的工具有什么不同。如果一个查询相互依赖,那么它们应该在try-catch中。如果没有,如果您不需要来自另一方的数据,并且如果您认为页面可以没有第一个try-catch的信息,那么您可以继续查询。

至少我是这么想的。

答案 4 :(得分:1)

我会说尽可能多地使用一个try-catch块。如果您的第二个查询取决于您的第一个查询是否成功,那么如果第一个查询引发异常,则不会执行第二个查询。
在我看来,一系列try-catch块并不能实现非常易读的代码。一个相当大的尝试捕获是可以的,只要你不是所有的口袋妖怪风格(必须抓住所有)......我的意思是,在一个try-block中执行5个查询是可以的,但是当你正在处理同一个区块中每个查询的结果,你的事情太过分了。

如果您想知道哪种方法最有效:catch - 块被Exception类的实例触发。 catch块中的代码应该处理该错误,因此脚本不需要完全失败,并且可以恢复正常服务。
如果你使用几个try-catch块,那么代码片段可能会抛出几个Exception个实例(在这种情况下为PDOException)。但是“minor”的开销是,创建一个新实例并不是免费的。如果在行程结束时您仍然希望向用户显示成功查询的数据并显示某些数据未成功检索的通知,则需要多次尝试捕获,如果您要显示所有东西,或者什么都没有,使用1个try-catch块,并使用Exception实例来计算出什么样的查询失败,并向用户显示相应的错误消息(或者告诉他们一切都出错了)