【问题标题】:PHP Log to error_log on specific errorPHP 将特定错误记录到 error_log
【发布时间】:2016-03-16 11:41:07
【问题描述】:

我在 PHP 中有一个类似的查询:

$result = $db->prepare("SELECT * FROM table WHERE page_url_match = :pageurlmatch AND datetime(post_time) > datetime('now', '-32 hours')"); # line 124
$result->bindValue(':pageurlmatch', $shorturl, SQLITE3_TEXT); # line 130

我不断收到错误:

[2015 年 12 月 10 日 12:20:09 America/New_York] PHP 警告:SQLite3::prepare():无法准备语句:1,“现在”附近:第 124 行 XXX 中的语法错误

[10-Dec-2015 12:20:09 America/New_York] PHP 致命错误:在第 130 行对 XXX 中的非对象调用成员函数 bindValue()

如果此错误再次出现,我如何让 PHP 将特定变量记录到 error_log 文件中。我知道我可以使用error_log($var);,但我不知道如何触发它,只有在出现错误时才会执行

【问题讨论】:

    标签: php sqlite error-handling


    【解决方案1】:

    您首先停止假设 DB 调用将始终成功。在这种情况下,您遇到了 SQL 语法错误,这意味着准备调用返回布尔值 false。然后您使用该布尔值 false 就好像它是一个语句句柄,并导致进一步的问题。

    永远不要永远在处理外部资源时假设成功。防御性写作:假设失败,测试失败,并将成功视为惊喜。

    猜测您正在使用的是 PDO,因此要么开始测试布尔错误返回,要么打开异常并开始尝试/捕获所有内容。

    $stmt = $db->prepare(...);
    if ($stmt === false) {
       error_log('prepare failed for reason: ' . $db->errorInfo);
       die();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 2014-06-10
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 2017-12-31
      • 2013-04-18
      相关资源
      最近更新 更多