【问题标题】:Fetch All Value获取所有值
【发布时间】:2014-09-06 19:42:09
【问题描述】:

我有这个代码:

$query_search_select = $db->prepare("SELECT * , COUNT(*) AS coun FROM users WHERE user LIKE :keyword ;");
$query_search_select->bindParam(":keyword" , $key_search , PDO::PARAM_STR ) ;
$query_search_select->execute();

查询有效,但是当我这样获取信息时:

while($res = $query_search_select->fetch(PDO::FETCH_ASSOC)){
// code 
}

但是循环只在 1 次,在 COUNT(*) 结果 2 中(它是正确的)但是这个循环只在 1 次......为什么?我在 stackoverflow 和互联网上搜索,我试过 fetchAll 但我遇到了同样的问题......

【问题讨论】:

  • 你为什么不用fetchAll
  • 根据AS coun,您的回显行应该包含类似$res['coun']; 的内容,或者如果您不打算在回声中使用它,请删除, COUNT(*) AS coun;您的问题中没有显示,所以我们不知道您是如何使用它的。
  • 是的,我同意@Fred-ii-,您的while 样本没有提供太多信息,您如何显示/返回结果。愿你一直覆盖你的结果......
  • 问题是:$res_search = $query_search_select->fetch(PDO::FETCH_ASSOC);只有一个结果

标签: php sql pdo


【解决方案1】:

这里的问题是,COUNT() 是一个GROUP BY 或聚合函数
(请参阅http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

因此,如果您在 MySQL 语句中使用 COUNT(),您的结果集将自动分组到一行。


但你仍然可以这样做:

"SELECT * , (SELECT COUNT(*) FROM users WHERE user LIKE :keyword) AS coun FROM users WHERE user LIKE :keyword2"


注意: 您必须添加另一个参数绑定,因为参数只能在 MySQL 语句中使用一次:

$query_search_select->bindParam(":keyword2" , $key_search , PDO::PARAM_STR ) ;

【讨论】:

    【解决方案2】:

    试试这个

    $result = $query_search_select->fetchAll(PDO::FETCH_ASSOC);
    
    print_r($result);
    

    注意:您不必将whilefetchAll 一起使用

    在您的情况下,您应该查看所有信息是否都在结果中

    while($res = $query_search_select->fetch(PDO::FETCH_ASSOC)){
        $collection[] = $res;
    }
    print_r($collection);
    

    但如上所示,这可以在 1 行中处理:)

    注意 2: 您在 select 语句中的计数有点没用。实际上你已经影响了行,你可以通过$query_search_select->rowCount();得到这些

    注3:

    我猜这是你的主要问题。

    检查您的LIKE 声明。你那里没有%。如果您的数据库中有 foofoobar 并像构建它一样使用您的 statment 搜索 foo,那么您只会 返回 1 个结果!!! LIKEstatement 如下所示:

    SELECT * FROM X WHERE name LIKE '%foo%'
    

    返回名称为 foo 的条目,并且条目在 foo 之前和之后可以有值

    SELECT * FROM X WHERE name LIKE '%foo'
    

    返回名称为 foo 的条目,并且条目可以在 foo 之前有值

    SELECT * FROM X WHERE name LIKE 'foo%'
    

    返回名称为 foo 的条目,并且条目可以在 foo 之后有值

    SELECT * FROM X WHERE name LIKE 'foo'
    

    返回名称为 foo 的条目,并且条目 CAN'T 在 foo 之后或之前有值

    【讨论】:

    • 我尝试使用 fetchall,但使用 print r 只有一个结果
    • @Carbos 你能给我提供一个sql fiddle 和一些示例数据吗?
    • @Carbos 在我的帖子中查看我的更改
    • 问题出在 count(*)
    【解决方案3】:

    我今天第二次回答这个问题。不要在循环中使用fetchAll()。它返回一个数组。如果您需要查找 PHP 数组以了解这意味着什么,我建议您采取这种做法。

    然后循环遍历返回的数组,而不是尝试循环遍历 fetch() 的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2011-04-24
      • 2021-10-29
      • 2013-12-31
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多