mysqli fetch assoc仅返回一半结果

时间:2014-07-22 17:44:28

标签: php mysqli while-loop

我想创建一个函数,它返回数组中mysqli查询的所有结果。

function Get(){
// verification... verification...
     $res = $this -> link -> query("SELECT " . $select . " FROM " . $from);
     while ($res->fetch_assoc())
     {
         $row[] = $res->fetch_assoc();
     }
     return $row;
}
i = 0;
var_dump(Get());

while只返回1,3,5,7,9结果

有人可以解释一下结果吗?

3 个答案:

答案 0 :(得分:3)

你做两次$ ref-> fetch_assoc();

 while ($result = $res->fetch_assoc())
 {
     $row[] = $result;
 }

答案 1 :(得分:0)

您应该更改代码并运行:

while ($result = $res->fetch_assoc())
{
         $row[] =  $result;
}

说明:

在你的循环代码中,你有while ($res->fetch_assoc())是什么使得第一条记录从你的结果中获取,并且它被检查是否该记录在数据库中(它没有记录{{1} } return false和loop isn不再执行。但是你不能将这个结果分配给任何变量,所以这个结果很简单就消失了。然后在你的循环中你使用fetch_assoc所以你从第二个记录中取出现在循环正在重新执行。这就是它的工作方式。

答案 2 :(得分:0)

$res->fetch_assoc()调用从结果集返回单行,并将结果集的内部指针递增1。由于您每fetch_assoc次来电呼叫Get()几次,因此您的结果并非您所期望的。如果您想获得一行结果,请拨打fetch_assoc一次。如果您想从结果集中返回所有行,请执行以下操作:

function Get(){
     // verification... verification...
     $res = $this -> link -> query("SELECT " . $select . " FROM " . $from);
     $rows = array();

     while( $row = $res->fetch_assoc() ) {
       $rows[] = $row;
     }

     return $rows;
}

var_dump(Get());