将错误返回PDO执行()与抛出的异常相同吗?

时间:2012-07-23 17:08:04

标签: php exception pdo execute

根据要求,我重新格式化了问题:

以下代码:

$newPDO=new PDO($DSN,$USER,$PASS);
$newPDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$SQL='SOME SQL STATEMENT MAYBE FAULTY';
try{
$Query=$newPDO->Prepare($SQL)
$Success=$Query->execute();
if(!$Success)
  echo('A');
}
catch(PDOException $e)
{
  echo('B');
}

问题是,是否可以看到'A'打印?对于不同类型的$SQL,例如select或insert,答案会有所不同吗?

原始问题:

  • 首先我将属性设置为PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION,因此,我认为,当execute()遇到来自DB的错误时,它应该抛出异常。 然后我意识到,如果这是真的,我甚至不必检查execute()的返回,只要抛出的异常与返回的'false'相同。我只需要从外面抓住。如果没有抓住,那么查询应该没问题 但我不确定这一点,因为默认情况下execute()不会根据手册抛出异常。当我插入一些东西时,我尝试了几个操作,如重复PK和唯一约束违规。支持我的断言:PDO将抛出异常,我可以从DB获取详细信息错误消息。 但我不知道这是否是一个普遍的事实。是否可以从execute()获取false,并且在将ERRMODE设置为最大值时不会抛出PDOEXCEPTION? *

2 个答案:

答案 0 :(得分:1)

试试这个:

   try {
      //Initial query processing
      $execute = $query->execute()
      if (!$execute) {
        //catch the exception
        throw new Exception ("blah")
      }
    } catch (Exception $e) {
      //Exception logic here

    }

像这样编写你的查询&如果他们在try部分遇到异常,它将转发到catch部分,您可以随意处理它(无论id是否取决于特定情况)。

如果没有例外,它将永远不会到达catch语句,您的查询将只执行。

说到 DUPLICATES - >你需要在SQL中解决这个问题。例如,您的查询可能是:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 

答案 1 :(得分:0)

我看到execute()返回false而没有抛出异常,这在我看来是一种意外/不良行为。 这意味着我们基本上必须同时进行 - 并行处理错误和异常处理。

在我的情况下:如果我准备了一个没有任何参数的插入查询,然后用参数执行。执行不会抛出异常但返回false。我建议任何人使用@ mlishn的解决方案。

相关问题