【问题标题】:mysql PDO where like or query returning only 1 resultmysql PDO where like or query 只返回 1 个结果
【发布时间】:2013-02-17 01:32:27
【问题描述】:

当我通过 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);
}

【问题讨论】:

  • 缺少AND,还是复制/粘贴错误?
  • 对不起,复制和粘贴真的很糟糕。凌晨 3 点我在哪里 :) 我会仔细检查一下。
  • 我认为您需要发布其余代码。如果您总是返回最后一条记录,那么听起来可能有其他问题。
  • 使用bindValue 而不是bindParambindParam 采用对值的引用,而不是值本身,并在需要构建整个查询时读取其值。您构建此查询的方式意味着它将捕获对同一 $q 变量的多个引用,并且读取它们的值当然会产生相同的值。

标签: mysql pdo sql-like


【解决方案1】:

尝试使用带引号的参数

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2013-08-10
    • 2012-11-06
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多