PHP记录特定错误的error_Log


PHP Log to error_log on specific error

我在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,接近";现在":第124行XXX中的语法错误

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

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

时才执行

您从停止假设DB调用总是成功开始。在这种情况下,您有一个SQL语法错误,这意味着prepare调用返回布尔值false。然后,您使用了布尔值false,就好像它是一个语句句柄一样,并导致了进一步的问题。

在处理外部资源时,永远不要想当然地认为成功。防御性写作:假设失败,测试失败,把成功当作一个惊喜。

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

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