我正在尝试使用ADODb预处理语句(使用MySQLi PHP驱动程序)搜索LIKE'%string%'的列:
$q_record = $DB->Prepare("
SELECT author, title
FROM books
WHERE (author LIKE '%?%' OR title LIKE '%?%')
ORDER BY submit_date
");
$record = $DB->GetAll($q_record, array( $q, $q ) ) or die($DB->ErrorMsg());
错误信息就像
“您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以便在'nano'%'或标题LIKE'%'nano'%'附近使用正确的语法。)ORDER BY submit_date DESC )''第4行“
“nano”是搜索关键字。
我怀疑我必须逃避'?'但我不知道该怎么做。
答案 0 :(得分:3)
简单明了:
$q_record = $DB->Prepare("
SELECT author, title
FROM books
WHERE (author LIKE CONCAT('%', ?, '%') OR title LIKE CONCAT('%', ?, '%'))
ORDER BY submit_date
");
换句话说,参数占位符?
不像字符串插值那样工作。像使用SQL变量一样使用它。