[英]Why is my PDO query using LIKE & LIMIT not working?
我正在制作具有以下查询的搜索框功能:
$query="SELECT * FROM article WHERE title LIKE ? OR description LIKE ?";
然后在foreach循环中,创建此数组:
$params[]= "%".$keyword."%";
$params[]= "%".$keyword."%";
然后我执行:
$stmt=$cxn->prepare($query);
$stmt->execute($params);
这可行,但是...
如果在foreach循环之后,我想添加“ LIMIT?,?”,请执行以下操作:
$query.=" LIMIT ?, ?";
$params[]=$row_number;
$params[]=$items_per_page;
然后,我执行脚本,并引发此致命错误:
PHP Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax
to use near ''0', '2'' at line 1' in ..../index.php:247
Stack trace:
#0 .../index.php(247): PDOStatement->execute(Array)
#1 {main}
thrown in ..../index.php on line 247
我试图在关键字周围添加撇号: $params= "'%".$keyword."%'";
但这没有用。
另外,我在PHPMyAdmin中尝试了完全相同的查询,并且它起作用了。
有谁知道为什么这会引发错误?
非常感谢。
更新:
$query="SELECT * FROM article WHERE title LIKE ? OR description LIKE ?";
$query.=" LIMIT ?, ?";
$stmt=$cxn->prepare($query);
$stmt->bindValue(1, "%".$keyword."%");
$stmt->bindValue(2, "%".$keyword."%");
$stmt->bindValue(3, $row_number, PDO::PARAM_INT);
$stmt->bindValue(4, $items_per_page, PDO::PARAM_INT);
$stmt->execute();
LIKE无法正常工作的原因是,当您将绑定参数与LIKE一起使用时,会将'%value%'视为字符串。
您将必须使用:
$query="SELECT * FROM article WHERE title LIKE CONCAT('%',?,'%') OR description LIKE CONCAT('%',?,'%')";
我认为您需要转换您在limit子句中传递的变量。 看到这个...to use near ''0', '2''
在LIMIT
子句中的值上有单引号
尝试
$query.=" LIMIT ?, ?";
$params[] = intval($row_number);
$params[] = intval($items_per_page);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.