在ADOdb准备语句中使用LIKE时出现SQL语法错误

时间:2015-12-03 12:25:17

标签: mysqli adodb

我正在尝试使用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”是搜索关键字。

我怀疑我必须逃避'?'但我不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

简单明了:

$q_record = $DB->Prepare("
  SELECT author, title
  FROM books
  WHERE (author LIKE CONCAT('%', ?, '%') OR title LIKE CONCAT('%', ?, '%'))
  ORDER BY submit_date
");

换句话说,参数占位符?不像字符串插值那样工作。像使用SQL变量一样使用它。