我正在从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
我显然正在尝试创建一个函数,我可以在其中查询数据库,并将结果返回到关联数组或作为对象。我做错了什么?
答案 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;