【问题标题】:How can I use mysqli fetch_assoc() several times with prepared statements on same PHP page?如何在同一个 PHP 页面上多次使用 mysqli fetch_assoc() 和准备好的语句?
【发布时间】:2020-01-19 02:47:13
【问题描述】:

有没有办法在同一个页面上多次使用 fetch_assoc() 和准备好的语句?

    $data = $conn->prepare("SELECT * FROM some_table WHERE id=?");
    $data->bind_param('i',$id);
    $data->execute();
    $result = $data->get_result();  

我希望能够以多种不同的方式在同一页面上多次使用fetch_assoc()。如果我想循环两次,我应该可以做到。如果我想循环并进行一次提取,我也应该能够做到这一点。现在看来,fetch_assoc() 被使用一次后,就不能在同一页面上再次使用了。

循环中

while($row = $result->fetch_assoc()){
...
}

单次提取

$user = $result->fetch_assoc();
$first_name = $user['first_name'];

【问题讨论】:

    标签: php mysqli associative-array


    【解决方案1】:

    虽然技术上可以(Nick 展示了如何)倒带 mysqli_result 对象,但许多人发现使用 mysqli_result 很麻烦。将所有记录提取到 PHP 数组中并使用多维数组而不是 mysqli_result 对象要容易得多。

    $result = $data->get_result()->fetch_all(MYSQLI_ASSOC);
    

    这样你就可以对这个数组做任何你想做的事情。可以过滤,可以循环多次,可以使用PHP中所有的标准数组函数。

    $resultsFiltered = array_filter($results, fn($e) => $e['someColumn']>200);
    foreach($resultsFiltered as $row) {
        // only records with someColumn > 200
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用mysqli_result::data_seek 在每次使用后重置结果指针,以便您可以多次循环结果。例如:

      while($row = $result->fetch_assoc()){
      ...
      }
      $result->data_seek(0);
      while($row = $result->fetch_assoc()){
      ...
      }
      

      【讨论】:

        猜你喜欢
        • 2016-10-27
        • 1970-01-01
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多