mysql PDO where like or query 只返回 1 个结果

标签 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 :q0 OR type LIKE :q1 OR type LIKE :q2 ) AND bread_hide = 0 LIMIT 20; 

因此,如果用户输入“hite grain brown”,将绑定(bind)以下参数:

:q0 = %hite%
:q1 = %grain%
:q2 = %brown%

手动运行时,我得到以下结果:

white bread
wholegrain
brown bread

当运行我的 PHP PDO 查询时,我只得到最后一个:

brown bread

如果用户输入“hite grain”,我得到的是wholegrain 而不是white bread

我希望有人知道这是什么原因/修复方法,谢谢!

php代码: 以下是我将如何绑定(bind)参数、执行查询和检索数据:

$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%'

关于mysql PDO where like or query 只返回 1 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15176537/

相关文章:

mysql - 如何在MYSQL中获取主管的名字而不是UserID + INNER JOIN

php - 500内部服务器错误。 PHP提交页面

php artisan migrate 抛出 [PDO 异常] 找不到驱动程序 - 使用 Laravel

mysql - 使用Where子句从 View 中选择引用另一个数据库 - 未知列错误

php - Mysql 多数据库连接不起作用

postgresql - 如何在不允许正则表达式注入(inject)的情况下在 sql 中使用文本搜索和参数化查询

database - Zend Db 连接和配置

mysql - 错误1064#使用mysql Like关键字时

mysql - SQL 使用 LIKE 可能出现语法错误

mysql LIKE 和正则表达式 VS RLIKE 和变音符号