mysqli查询只返回第一行

时间:2013-07-29 12:42:48

标签: php mysql mysqli

我正在从mysql迁移到mysqli,我在查询中从数据库返回多行时遇到问题。

$db = new mysqli($hostname, $sql_us, $sql_us_pwd, $sql_db); // This is already connected

function db_query($db, $query, $type = 'object') {

    global $db;

    $result = $db->query($query);

    if ($type == 'assoc') {
        while($row = $result->fetch_assoc()) {
          return $row;
        }
    } else {    
        while($row = $result->fetch_object()) {
          return $row;
        }   
    }

    mysqli_free_result($result);

}



$query = "SELECT * FROM `users`";
$user = db_query($db, $query);
print_r($user); // This is only returning the first row of results

我显然正在尝试创建一个函数,我可以在其中查询数据库,并将结果返回到关联数组或作为对象。我做错了什么?

5 个答案:

答案 0 :(得分:2)

使用此代码:

$rows = array();
if ($type == 'assoc') {
    while($row = $result->fetch_assoc()) {
      $rows[] = $row;
    }
} else {    
    while($row = $result->fetch_object()) {
      $rows[] = $row;
    }   
}
return $rows;

你正在使用while内部的return,并在第一次迭代后返回终止while循环,这就是你只得到一行的原因。

答案 1 :(得分:2)

你需要将while循环值存储到数组中试试这个

$rows = array();
if ($type == 'assoc') {
    while($row = $result->fetch_assoc()) {
      $rows[] = $row;
    }
} else {    
    while($row = $result->fetch_object()) {
      $rows[] = $row;
    }   
}
return $rows;

答案 2 :(得分:2)

当你在一个函数中返回时,它会在那一点停止执行,然后返回到你正在返回的值所在的位置。

在你执行返回$行的情况下,一读完第一行就会退出函数。

修复是:

$result = array();
if ($type == 'assoc') {
    while($row = $result->fetch_assoc()) {
      $result[] = $row;
    }

} else {    

    while($row = $result->fetch_object()) {
      $result[] = $row;
    }   
}
return $row;

答案 3 :(得分:1)

您只返回第一行。你必须返回一个数组。

答案 4 :(得分:1)

$arr = array();
if ($type == 'assoc') {
  while($row = $result->fetch_assoc()) {
    $arr[] = $row;
  }
}
else {    
  while($row = $result->fetch_object()) {
    $arr[] = $row;   
  }
}
return $arr;