当我通过 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 :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
如果用户输入“hite grain”,我会得到wholegrain
而不是white 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);
}