Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-PDO-我应该在try{}块中放置什么_Php_Pdo - Fatal编程技术网

PHP-PDO-我应该在try{}块中放置什么

PHP-PDO-我应该在try{}块中放置什么,php,pdo,Php,Pdo,在尝试捕获异常时,应该将prepare和bindParam语句放在try{}块中。prepare和bindParam是否可以导致/生成/无论适当的术语是什么 现在我只把execute放在try{}中,我不知道这样做是否正确 因此,我应该: $s = $dbh->prepare("select * from products where id=:p_id"); $s->bindParam(":p_id",$p_id,PDO::PARAM_INT); try { $s->e

在尝试捕获异常时,应该将prepare和bindParam语句放在try{}块中。prepare和bindParam是否可以导致/生成/无论适当的术语是什么

现在我只把execute放在try{}中,我不知道这样做是否正确

因此,我应该:

$s = $dbh->prepare("select * from products where id=:p_id");
$s->bindParam(":p_id",$p_id,PDO::PARAM_INT);
try {
    $s->execute();
} catch (PDOException $e) {
    log_error("MySQL error: ".$e->getMessage());
}


关于try,你应该把可能引发异常的东西放在那里。
我看到的是,将所有连接到execute/…的语句。。。在这一块中,很容易被误导什么可以引发异常…

关于try的事情-你应该把可以引发异常的东西放在那里。
我看到的是,将所有连接到execute/…的语句。。。在这个块中,很容易被误导,什么东西会引发异常…

通常,应用程序代码中根本不应该使用它

许多使用try的草图代码。。捕获只是草图,以显示一些想法。不应该照样复制


应该有一个应用程序范围的异常处理程序,负责捕获所有异常,并采取适当的措施记录错误消息,并正常抛出503 HTTP错误。

通常,它不应该在应用程序代码中使用

许多使用try的草图代码。。捕获只是草图,以显示一些想法。不应该照样复制


应该有一个应用程序范围的异常处理程序,负责捕获所有异常,并采取适当的措施记录错误消息并正常抛出503 HTTP错误。

我认为,为了捕获任何可能抛出的语句所引发的异常,使用try/catch子句是天翻地覆的。相反,您想要的是显式地为您事先知道可能发生异常的语句提供回退机制,您可以从中恢复


您可以选择在日志文件中写下异常并继续执行路径,但是这会带来麻烦。如果不在测试中,它将在发布后进行,因为这会使会话处于未定义状态。在给出的示例中,您可以这样做,在日志文件中写下一些东西,然后您可以表现得好像世界一点也没有改变一样。现在,如果查询本身试图插入一个财务记录,而您现在却不知道它,那该怎么办?

我认为,为了捕捉任何可能抛出的语句所引发的异常,设置一个try/catch子句是天翻地覆的。相反,您想要的是显式地为您事先知道可能发生异常的语句提供回退机制,您可以从中恢复


您可以选择在日志文件中写下异常并继续执行路径,但是这会带来麻烦。如果不在测试中,它将在发布后进行,因为这会使会话处于未定义状态。在给出的示例中,您可以这样做,在日志文件中写下一些东西,然后您可以表现得好像世界一点也没有改变一样。现在,如果查询本身试图插入一个财务记录,而您现在却不知道它,该怎么办?

您应该检查您的查询,这样就不会有这样的执行。我不明白这一点。请详细说明一下好吗?如果您通过设置PDO::ATTR_ERRMODE告诉PDO,PDO只会抛出异常-如果您没有这样做,唯一可能抛出异常的是PDO::__construct@L84编辑您的问题,用一小段代码解释问题。这将有助于每个人看你的问题。看到了吗?@L84如果您将PDO设置为抛出异常,那么任何可能触发错误的东西都将抛出错误条件。所以你的问题的简短回答是肯定的。你应该回答你的问题,这样就不会有这样的处决。我不明白。请详细说明一下好吗?如果您通过设置PDO::ATTR_ERRMODE告诉PDO,PDO只会抛出异常-如果您没有这样做,唯一可能抛出异常的是PDO::__construct@L84编辑您的问题,用一小段代码解释问题。这将有助于每个人看你的问题。看到了吗?@L84如果您将PDO设置为抛出异常,那么任何可能触发错误的东西都将抛出错误条件。因此,对您的问题的简短回答是肯定的。+1,但您似乎建议允许所有异常冒泡到全局错误处理程序,这反过来表明,对于任何错误,您总是希望突破当前的执行范围,即没有错误是可恢复的。还是我看错了?这不会阻止整个脚本的执行吗?因为这正是我不想发生的事情,只是一个可爱的小错误消息,以“Oops”+1开头,但您似乎建议允许所有异常冒泡到一个全局错误处理程序,这反过来又表明您总是希望打破ou
当前执行范围的t,即任何错误都不可恢复。还是我看错了?这不会阻止整个脚本的执行吗?因为这正是我不想发生的,只是一条以“Oops”开头的可爱的小错误消息,脚本肯定会知道出了什么问题,我可以把它写成$selecterror=true;在catch{}块中,稍后对其进行测试。我绝对不想因为服务器出现暂时性问题而破坏用户体验。当然,问题是用户体验可能已经被破坏了。你在为一项不可能完成的任务做准备。我真正想说的是,在决定实现catch块之前,您需要事先知道语句可以抛出哪些异常。在您的情况下,可能引发的两个异常是服务器不可用或输入无效。你考虑过这两件事吗?你考虑过所有其他的例外情况吗?即使在所有可能的情况下,您也能信任以前查询的结果吗?等等等等等等,但是如果我知道哪条语句会抛出什么异常,我怎么能毫无疑问地确定呢?我可以测试我想要的一切,有些东西仍然可以勉强通过。你可以尽最大努力,但你不能完全了解它们。这就是为什么你不应该只在少数情况下捕捉到,当某个语句抛出某个异常时,你有一个计划。阅读文档并仅保护那些您确实有针对特定异常的计划的语句。最后,确保捕捉到正确的异常,并且该异常是您预期的异常;在catch{}块中,稍后对其进行测试。我绝对不想因为服务器出现暂时性问题而破坏用户体验。当然,问题是用户体验可能已经被破坏了。你在为一项不可能完成的任务做准备。我真正想说的是,在决定实现catch块之前,您需要事先知道语句可以抛出哪些异常。在您的情况下,可能引发的两个异常是服务器不可用或输入无效。你考虑过这两件事吗?你考虑过所有其他的例外情况吗?即使在所有可能的情况下,您也能信任以前查询的结果吗?等等等等等等,但是如果我知道哪条语句会抛出什么异常,我怎么能毫无疑问地确定呢?我可以测试我想要的一切,有些东西仍然可以勉强通过。你可以尽最大努力,但你不能完全了解它们。这就是为什么你不应该只在少数情况下捕捉到,当某个语句抛出某个异常时,你有一个计划。阅读文档并仅保护那些您确实有针对特定异常的计划的语句。最后,确保捕捉到正确的异常,并且该异常是您所期望的。
try {
    $s = $dbh->prepare("select * from products where id=:p_id");
    $s->bindParam(":p_id",$p_id,PDO::PARAM_INT);
    $s->execute();
} catch (PDOException $e) {
    log_error("MySQL error: ".$e->getMessage());
}