获取所有值

时间:2014-09-06 19:42:09

标签: php sql pdo fetch

我有这段代码:

$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但是我有同样的问题......

3 个答案:

答案 0 :(得分:1)

试试这个

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

print_r($result);

注意:您不必使用while fetchAll

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

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

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

注2:您在select语句中的计数有点无用。实际上,您已经影响了行,您可以使用$query_search_select->rowCount();

获取这些行

注3:

我想这是你的主要问题。

检查您的LIKE声明。那里没有%。如果您的数据库中有 foo foobar 并使用您的语句,就像您构建搜索 foo 一样,那么您只会 获得1结果返回!!! LIKE语句如下所示:

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之后或之前的值

答案 1 :(得分:1)

问题在于,COUNT()GROUP BY或汇总功能
(见http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

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


但是你仍然可以这样做:

"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 :(得分:0)

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

然后遍历返回的数组,而不是试图遍历迭代fetch()的结果。