如何不执行破坏性读取?

时间:2014-07-17 23:06:51

标签: php arrays mysqli

我有一个将查询值保存到PHP数组中的函数。我的代码看起来像这样:

if(mysqli_fetch_row($result)){
    while($line = mysqli_fetch_row($result)){
        foreach($line as $row => $value){
            $value = mysqli_real_escape_string($conn, $value);
            array_push($rows, $value);
        }
    }
    return $rows
}

我注意到它不会保存第一行值,我调试并发现这个bug的根本原因在于行if(mysqli_fetch_row($result)){ ...基本上一旦它进入while循环就开始了在第二排。为了确保我没有丢失查询中的任何数据,我将代码更改为:

$line = mysqli_fetch_row($result);
if($line){
    //var_dump($line);
    foreach($line as $row => $value){
        $value = mysqli_real_escape_string($conn, $value);
        array_push($rows, $value);
    }
    while($line = mysqli_fetch_row($result)){
        //var_dump($line);
        foreach($line as $row => $value){
            $value = mysqli_real_escape_string($conn, $value);
            array_push($rows, $value);
        }
    }
    return $rows;
}

必须有一个if语句,因为有一个else子句来处理没有返回的数据。我想我在$line = mysqli_fetch_row($result);语句之前使用if行在正确的路径上,但我觉得有两个foreach循环是多余的,可能是不必要的。

2 个答案:

答案 0 :(得分:0)

这个怎么样?

if($line = mysqli_fetch_row($result)){
    while($line){
        foreach($line as $row => $value){
            $value = mysqli_real_escape_string($conn, $value);
            array_push($rows, $value);
        }
        $line = mysqli_fetch_row($result);
    }
    return $rows;
}

答案 1 :(得分:0)

为什么你不计算返回的行数??

while($line = mysqli_fetch_row($result)){
    foreach($line as $row => $value){
        $value = mysqli_real_escape_string($conn, $value);
        array_push($rows, $value);
    }
}
if( !empty($rows) ){
    return $rows;
}
else{
    // what you do in your script if "if(mysqli_fetch_row($result))" returns false
}