Php fetch_assoc获取与num_rows不同的数据量

时间:2017-04-06 09:22:30

标签: php mysql

我有一个如下的查询

SELECT DISTINCT username 
FROM comment_of_post 
JOIN users_info 
    ON comment_of_post.commenter_user_id = users_info.user_id
JOIN comment_info 
    ON comment_info.comment_id = comment_of_post.comment_id  
WHERE comment_info.post_id = ?

我在localhost中测试它应该有2条这样的记录: abcabced

我还检查num_rows也是2,但当我运行fetch_assoc()var_dump()时,它会显示此结果

array (size=1)   'username' => string 'abc' (length=6)

数组中只显示1条记录,数组中未显示另一条记录abced

有人可以告诉我我做错了吗?

修改 以下是我使用查询的功能

 public function getAllCommenterUsername($post_id){
        $stmt = $this->conn->prepare("SELECT DISTINCT username FROM comment_of_post 
                                            JOIN users_info ON comment_of_post.commenter_user_id = users_info.user_id
                                             JOIN comment_info ON comment_info.comment_id = comment_of_post.comment_id 
                                             WHERE comment_info.post_id = ? ");
        $stmt->bind_param("s",$post_id);
        $result= $stmt->execute();

        if($result){
            $commenterUsername = $stmt->get_result();
            $stmt->close();
            return $commenterUsername;
        }else{
            return NULL;
        }
    }

我运行这样的功能

 $username = $db->getAllCommenterUsername($post_id)->fetch_assoc();
 var_dump($username);

3 个答案:

答案 0 :(得分:2)

你想这样使用fetch_all()

fetch_all(MYSQLI_ASSOC)

你会像这样实现它

$username = $db->getAllCommenterUsername($post_id)->fetch_all(MYSQLI_ASSOC);
var_dump($username);

此处的文档

http://php.net/manual/en/mysqli-result.fetch-all.php

答案 1 :(得分:1)

fetch_assoc仅逐行返回。你应该在循环中使用它。 fetchall()返回数组中的所有行。 如果您正在使用PDO Mysql,请查看此http://php.net/manual/fr/pdostatement.fetchall.php

答案 2 :(得分:0)

  

@ken在fetch_assoc()的位置使用fetchAll_assoc()

fetch_assoc() = fetch only one row from the total found rows

fetchAll_assoc() = fetch all rows which are found