我在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);
但我不知道如何触发这个只有在出现错误时
答案 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();
}