在ADOdb预处理语句中使用LIKE时出现SQL语法错误。

问题描述 投票:1回答:1

我试图使用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'%' OR title LIKE '%'nano'%') ORDER BY submit_date DESC ) ' 第4行的正确语法"

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

我怀疑我必须用'?'来转义,但我不知道该怎么做。

php adodb
1个回答
3
投票

简单明了。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.