【问题标题】:PDO setAttribute with PDOExceptionPDO setAttribute 与 PDOException
【发布时间】:2013-10-07 07:59:42
【问题描述】:

这是我当前使用的函数:

function pdo_connect(){
  try {

      $pdo = new PDO('mysql:host=localhost;dbname='.DB_NAME, DB_USER, DB_PASS);
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);     
      $pdo->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );           
      $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

  } catch (PDOException $e) {

      die("Error!: " . $e->getMessage() . "<br/>");

  }

  return $pdo;
}

但考虑到我用过这个

$pdo->setAttribute( INVALID_SYNTAX, false );

我不想看到致命错误:

致命错误:未定义的类常量“INVALID_SYNTAX”在 C:\xampp\htdocs\test.php 第 12 行

我想捕获异常,那么该怎么做/?

【问题讨论】:

    标签: php mysql exception-handling pdo


    【解决方案1】:

    实际上,捕捉开发阶段的错误没有意义

    只能在开发阶段未定义常量。捕捉它并没有什么用 - 开发人员只需定义它并继续前进。

    异常是 PHP 中最容易被误解的机制之一。尽管它们实际上只能在可以以某种方式处理可恢复错误的情况下使用,但 PHP 用户可以通过所有适当的方式利用它:用于错误报告、数据验证或作为错误抑制运算符。

    【讨论】:

    • 那么不管是setAttribute还是其他命令。
    • 是的。这就是 deceze 所说的 - 确实没关系
    【解决方案2】:

    未定义的常量错误不是异常,而是编译错误。这就像语法错误,是代码中需要修复的基本错误。在运行时捕获它是没有意义的。实际上也不可能。

    常量INVALID_SYNTAX 也永远不会触发“未定义的 常量”错误,只会触发“普通的”未定义常量 错误。


    异常用于在运行时处理异常错误。异常错误是在正常执行期间不应发生的错误,但您已做好准备以防万一。
    输入错误的常量总是会导致错误,而且总是相同的错误。这不是异常,只是错误的代码。因此,想要在运行时动态处理它是没有意义的。

    【讨论】:

    • 哦,所以没有办法抓住它?
    • 你不能 catch 它,因为它不是 throw 异常。您可以使用自定义错误处理程序错误处理它,但这是一个不可恢复的错误,因此即使您这样做了也没什么可做的。
    • 澄清答案:这实际上与 PDO 无关。这就是 PHP 处理未定义常量(常规常量或类常量)的方式。您可以编写自定义错误处理程序,但如果我没记错的话,致命错误是无法捕获的。
    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2012-11-19
    • 2019-02-19
    • 2011-10-10
    • 2019-08-03
    相关资源
    最近更新 更多