2013-07-29 150 views
1

我正在从mysql迁移到mysqli,并且我无法从查询中返回数据库中的多行。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 

我显然试图使一个功能,我可以查询数据库,要么在关联数组或者对象返回结果。我究竟做错了什么?

+1

http://php.net/manual/en/function.return.php –

+1

这样的功能有支持**预处理语句**或有没有用它在所有。 –

回答

2

使用此代码:

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

您正在使用的,而和返回内返回结束第一次迭代这就是为什么你得到只有一排后while循环。

1

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

1
$arr = array(); 
if ($type == 'assoc') { 
    while($row = $result->fetch_assoc()) { 
    $arr[] = $row; 
    } 
} 
else {  
    while($row = $result->fetch_object()) { 
    $arr[] = $row; 
    } 
} 
return $arr; 
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

当你在一个函数返回它停止在这一点上执行,并返回到它被称为从与价值你正在返回。

在你的情况下,当你做一个返回$行时,只要第一行被读取,你就会退出函数。

修复是:

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

} else {  

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