mysql PDO,其中like或query只返回1个结果
当我通过phpMyAdmin手动运行以下SQL时,返回的行数超过1行:mysql PDO,其中like或query只返回1个结果,mysql,pdo,sql-like,Mysql,Pdo,Sql Like,当我通过phpMyAdmin手动运行以下SQL时,返回的行数超过1行: SELECT * FROM bread WHERE (type LIKE '%hite%' OR type LIKE '%grain%' OR type LIKE '%brown%' ) AND bread_hide = 0 LIMIT 20; 然而,当我在PDO中运行它时,它只返回一个结果。SQL是为每个搜索词动态生成的,如下所示: SELECT * FROM bread WHERE ( type LIKE :q
SELECT *
FROM bread
WHERE (type LIKE '%hite%' OR type LIKE '%grain%' OR type LIKE '%brown%' )
AND bread_hide = 0
LIMIT 20;
然而,当我在PDO中运行它时,它只返回一个结果。SQL是为每个搜索词动态生成的,如下所示:
SELECT * FROM bread WHERE ( type LIKE :q0 OR type LIKE :q1 OR type LIKE :q2 ) AND bread_hide = 0 LIMIT 20;
因此,如果用户输入“hite grain brown”,则绑定以下参数:
:q0 = %hite%
:q1 = %grain%
:q2 = %brown%
手动运行时,我会得到以下结果:
white bread
wholegrain
brown bread
当运行我的PHP PDO查询时,我只得到最后一个:
brown bread
如果用户输入“白面包”,我将得到全麦
,而不是白面包
我希望有人知道原因/解决方法是什么,谢谢
php代码:
下面是如何绑定参数、执行查询和检索数据:
$statement_handle = $db_handle->prepare($breadSQL);
foreach($searchWord as $i=>$q) {
$q = "%".$q."%";
$statement_handle->bindParam(":q$i", $q);
}
$statement_handle->execute();
$statement_handle->setFetchMode(PDO::FETCH_ASSOC);
while($row = $statement_handle->fetch())
{
$breadList[] = array('breadName' => $row['bread_name']);
}
固定代码:
foreach($searchWord as $i=>$q) {
$q = "%".$q."%";
$statement_handle->bindValue(":q$i", $q, PDO::PARAM_STR);
}
尝试使用带引号的参数
:q0 = '%hite%'
:q1 = '%grain%'
:q2 = '%brown%'
缺少
和
,或者是复制/粘贴错误?抱歉,复制和粘贴错误。凌晨3点我在哪里:)我会再检查一遍。我想你需要把剩下的代码贴出来。如果您总是返回最后一条记录,听起来可能是其他错误。请使用bindValue
而不是bindParam
bindParam
引用值,而不是值本身,并在需要构建整个查询时读取其值。构建此查询的方式意味着它将捕获对同一$q
变量的多个引用,读取它们的值当然会产生相同的值。可能的重复