Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的PDO查询使用LIKE&;限制不起作用?_Php_Mysql - Fatal编程技术网

Php 为什么我的PDO查询使用LIKE&;限制不起作用?

Php 为什么我的PDO查询使用LIKE&;限制不起作用?,php,mysql,Php,Mysql,我正在制作具有此查询的搜索框功能: $query="SELECT * FROM article WHERE title LIKE ? OR description LIKE ?"; 然后在foreach循环中,我创建以下数组: $params[]= "%".$keyword."%"; $params[]= "%".$keyword."%"; 然后我执行: $stmt=$cxn->prepare($query); $stmt->execute($params); 这是可行的,但是

我正在制作具有此查询的搜索框功能:

$query="SELECT * FROM article WHERE title LIKE ? OR description LIKE ?";
然后在foreach循环中,我创建以下数组:

$params[]= "%".$keyword."%";
$params[]= "%".$keyword."%";
然后我执行:

$stmt=$cxn->prepare($query);
$stmt->execute($params);
这是可行的,但是

如果在foreach循环之后,我想添加“LIMIT?”和“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中尝试了完全相同的查询,结果成功了

有人知道为什么会抛出错误吗

提前非常感谢。

更新:

更新:


LIKE不起作用的原因是,当您将绑定参数与LIKE一起使用时,它将“%value%”视为字符串

您必须使用:

$query="SELECT * FROM article WHERE title LIKE CONCAT('%',?,'%') OR description LIKE CONCAT('%',?,'%')";

LIKE不起作用的原因是,当您将绑定参数与LIKE一起使用时,它将“%value%”视为字符串

您必须使用:

$query="SELECT * FROM article WHERE title LIKE CONCAT('%',?,'%') OR description LIKE CONCAT('%',?,'%')";

我认为您需要转换在limit子句中传递的变量。参见此
…要在“0”、“2”附近使用
限制
子句中的值上有单引号

试一试


我认为您需要转换在limit子句中传递的变量。参见此
…要在“0”、“2”附近使用
限制
子句中的值上有单引号

试一试



$keyword
的值是什么?Hi可能重复,值是字符串,只有字母。
$keyword
的值是什么?Hi可能重复,值是字符串,只有字母。先生,您能在数组中混合数据类型吗?:)嗨,谢谢你的回复。不幸的是,这不起作用。我正试图找出如何混合bindValue,以及代码中的
。我从一个建议的线程中得到了这段代码:
$cxn->bindValue(':row\u number',(int)trim($row\u number),PDO::PARAM\u int)
@alexx0186如果前面的方法不起作用,则需要显式设置数据类型。检查我的最新答案。非常感谢。数据类型是问题的根源。Regardssir的问题是,你能在
PHP
数组内部混合数据类型吗?:)嗨,谢谢你的回复。不幸的是,这不起作用。我正试图找出如何混合bindValue,以及代码中的
。我从一个建议的线程中得到了这段代码:
$cxn->bindValue(':row\u number',(int)trim($row\u number),PDO::PARAM\u int)
@alexx0186如果前面的方法不起作用,则需要显式设置数据类型。检查我的最新答案。非常感谢。数据类型是问题的根源。谢谢你的回复。我文章中的第一个SQL查询确实有效。当我在查询的末尾添加“LIMIT?”时,问题就开始了。谢谢你的回复。我文章中的第一个SQL查询确实有效。当我在查询的末尾添加“LIMIT?”时,问题就开始了。RegardsHi,谢谢你的回复。我试过了,但没能成功。我正在尝试找出如何将BindValue与
混合使用。Regards@alexx0186你为什么不这样做呢?每个值一个参数(我的意思是不使用数组)
$stmt->bindParam(':name',$name)$stmt->bindParam(':value',$value)嗨,我不确定我能不能这样做,因为我不知道用户要输入多少关键字。因此,对于我的foreach循环,我只需根据需要添加尽可能多的
(而不是绑定值)。不确定我能用BindParam做这个吗?嗨,谢谢你的回复。我试过了,但没能成功。我正在尝试找出如何将BindValue与
混合使用。Regards@alexx0186你为什么不这样做呢?每个值一个参数(我的意思是不使用数组)
$stmt->bindParam(':name',$name)$stmt->bindParam(':value',$value)嗨,我不确定我能不能这样做,因为我不知道用户要输入多少关键字。因此,对于我的foreach循环,我只需根据需要添加尽可能多的
(而不是绑定值)。不确定我是否可以使用BindParam..执行此操作。。?
$query.=" LIMIT ?, ?";
$params[] = intval($row_number);
$params[] = intval($items_per_page);