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


SQL Syntax Error When Using LIKE in an ADOdb Prepared Statement

我正试图使用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服务器版本对应的手册,在第4行的'nano'%'或title LIKE'%'nano'%')ORDER BY submit_date DESC)'附近使用正确的语法"

其中"nano"是搜索关键字。

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

简单明了:

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

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