Php 如何不执行破坏性读取?

Php 如何不执行破坏性读取?,php,arrays,mysqli,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, $valu

我有一个将查询值保存到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
}
我注意到它不会保存第一行值,我调试并发现该错误的根本原因是在ifmysqli_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子句来处理没有返回的数据。我认为我在if语句前面的$line=mysqli\u fetch\u row$result;行的路径是正确的,但是我觉得有两个foreach循环是多余的,可能是不必要的。

这是怎么回事

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;
}

为什么不直接计算返回的行数

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
}

调用mysqli_fetch_row$result将返回第一行,这就是为什么您无法在循环中返回第一行。您可以使用它检查是否返回了任何结果,如果没有,则输出错误,如果返回了,则循环返回结果。@scrowler我最喜欢您的答案,如果您需要代表,请将其作为答案