PHP在特定错误上记录到error_log

时间:2015-12-10 17:56:30

标签: php sqlite error-handling

我在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

我一直收到错误:

  

[10-Dec-2015 12:20:09 America / New_York] PHP警告:SQLite3 :: prepare():无法准备语句:1,接近“now”:第124行XXX中的语法错误

     

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

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

1 个答案:

答案 0 :(得分:1)

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

从不 EVER 在处理外部资源时假设成功。写出防御性的:假设失败,对失败进行测试,并将成功视为一种惊喜。

猜测你正在使用的是PDO,所以要么开始测试boolean false返回,要么打开异常并开始尝试/捕获所有内容。

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