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

Php 在ADOdb准备语句中使用LIKE时出现SQL语法错误,php,adodb,Php,Adodb,我正在尝试使用ADODb prepared语句(使用MySQLi PHP驱动程序)在类似“%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, arra

我正在尝试使用ADODb prepared语句(使用MySQLi PHP驱动程序)在类似“%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'%”或类似于''nano'%”的标题的正确语法”

其中“nano”是搜索关键字

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

简单明了:

$q_record = $DB->Prepare("
  SELECT author, title
  FROM books
  WHERE (author LIKE CONCAT('%', ?, '%') OR title LIKE CONCAT('%', ?, '%'))
  ORDER BY submit_date
");
换句话说,参数占位符
的工作方式与字符串插值不同。像使用SQL变量一样使用它