了解fetch_assoc()

时间:2016-09-01 09:29:47

标签: php methods

我试图了解fetch_assoc如何/为何如此工作。 我有以下代码:

$results = $connectToDb->fetch("SELECT * FROM customer");
$resultsArray = $results->fetch_assoc();
print_r($resultsArray);  //print_r 1

while($row = $results->fetch_assoc()){
    print_r($row);       //print_r 2
}

查询从表中返回3行。 为什么第一个print_r只返回查询数据的第一行,而第二个print_r返回全部3?如何将fetch_assoc放入while循环中,告诉它多次执行该操作?我读到fetch_assoc返回一个关联数组或NULL,但我正在努力理解while循环"告诉"如果有意义的话,fetch_assoc来获取下一行?

谢谢。

2 个答案:

答案 0 :(得分:15)

让我们尝试理解您的代码及其工作原理:

$results = $connectToDb->fetch("SELECT * FROM customer");

变量$results包含一系列由查询返回的行。集合的大小可以是0到n。

$resultsArray = $results->fetch_assoc();

此行从集合中获取第一个元素。如果集合为空,则返回NULL

while($row = $results->fetch_assoc()){
}

可以通过以下步骤解耦:

  1. 计算$row = $results->fetch_assoc()并返回数组元素 NULL
  2. 替换$row = $results->fetch_assoc()中的while并获得更多价值,并获得以下声明:while(array(with elements))while(NULL)
  3. 如果它while(array(with elements))它解析True中的while条件并允许执行迭代。
  4. 如果它while(NULL)它会解析False中的while条件并退出循环。

答案 1 :(得分:2)

我认为它很有用:

function get_posts(){
$posts = array();
if ($result = $mysqli->query("SELECT  id, post_userid, name, lang, country, post_image, post_date, post_date_updated FROM posts ORDER BY `post_date` DESC ;")) {

    while ($row = $result->fetch_assoc())
    {
        $posts[$row['id']] = $row ;   
    }
} else {
    printf("Prepared Statement Error: %s\n", $mysqli->error);
}
return $posts;

}