1

我正在从 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

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

4

5 回答 5

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 并 return 在第一次迭代后终止 while 循环,这就是您只得到一行的原因。

于 2013-07-29T12:46:09.023 回答
2

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

$rows = array();
if ($type == 'assoc') {
    while($row = $result->fetch_assoc()) {
      $rows[] = $row;
    }
} else {    
    while($row = $result->fetch_object()) {
      $rows[] = $row;
    }   
}
return $rows;
于 2013-07-29T12:47:13.207 回答
2

当您在函数中返回时,它会在该点停止执行并返回到使用您返回的值调用它的位置。

在您的情况下,当您执行 return $row 时,您将在读取第一行后立即退出该函数。

修复是:

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

} else {    

    while($row = $result->fetch_object()) {
      $result[] = $row;
    }   
}
return $row;
于 2013-07-29T12:47:15.310 回答
1

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

于 2013-07-29T12:43:42.500 回答
1
$arr = array();
if ($type == 'assoc') {
  while($row = $result->fetch_assoc()) {
    $arr[] = $row;
  }
}
else {    
  while($row = $result->fetch_object()) {
    $arr[] = $row;   
  }
}
return $arr;
于 2013-07-29T12:47:06.457 回答