【问题标题】:MySQLi error handlingMySQLi 错误处理
【发布时间】:2011-02-25 07:16:24
【问题描述】:

是否可以指定 MySQLi 向 PHP 默认的“error_log”指令发送任何错误和警告?我似乎找不到类规范的任何错误选项,我不希望像这样手动处理错误:

if ($result = $mysqli->query("...")) {  }
else
    handle $mysqli->error;

【问题讨论】:

    标签: php error-handling mysqli error-log


    【解决方案1】:

    当然,这是可能的。您所要做的就是启用自动错误报告并告诉 PHP 将所有错误记录到一个文件中。

    在使用 mysqli 打开连接之前,您应该确保已启用这两个设置:

    ini_set("log_errors", 1); // this can be set in INI file too, together with error_log path
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
    $mysqli = new mysqli('localhost', /** ... */);
    

    您不再需要手动检查 mysqli 错误,所有错误都会记录到文件中。

    【讨论】:

      【解决方案2】:

      嗯,一种方法是覆盖类:

      class myMySQLi extends MySQLi {
      
          public function query($query, $resultmode = MYSQLI_STORE_RESULT) {
              $res = parent::query($query, $resultmode);
              if (!$res) {
                  //handle error
              }
              return $res;
          }
      }
      

      然后照常使用,除了不是通过new MySQLi() 创建连接,而是使用new myMySQLi()。除了错误处理之外,它的运行方式相同。我经常这样做,在错误时抛出异常并向 MySQLi 添加额外的功能......

      【讨论】:

      • 您好,感谢您的回复。我想如果它是唯一的选择我可以这样做,但我觉得奇怪的是 mysqli ctor 生成的错误可以记录到默认的 error_log 中,但是在使用 mysqli 对象时发生的任何错误都必须手动处理!
      猜你喜欢
      • 2012-03-10
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多