【问题标题】:How to not perform destructive reads?如何不执行破坏性读取?
【发布时间】:2014-07-17 23:06:50
【问题描述】:

我有一个函数可以将查询的值保存到 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
}

我注意到它不会保存第一行值,我调试并发现这个错误的根本原因在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 子句来处理没有返回的数据。我认为我在if 语句之前的$line = mysqli_fetch_row($result); 行是正确的,但我觉得有两个foreach 循环是多余的,而且可能是不必要的。

【问题讨论】:

  • 调用mysqli_fetch_row($result) 会带回第一行,这就是为什么您没有在循环中返回第一行。您可以使用mysqli_num_rows() 来检查您是否返回了任何结果,如果没有则输出错误,如果有,则循环遍历结果。
  • @scrowler 我最喜欢你的回答,如果你想要代表的话,把它作为答案

标签: php arrays mysqli


【解决方案1】:

这个怎么样?

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

【讨论】:

    【解决方案2】:

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

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      相关资源
      最近更新 更多