如何在同一 PHP 页面上多次使用 mysqli fetch_assoc() 和准备好的语句?

Gro*_*ogu 3 php mysqli associative-array

有没有一种方法可以fetch_assoc()在同一页面上使用准备好的语句多次?

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

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

在一个循环中

while($row = $result->fetch_assoc()){
...
}
Run Code Online (Sandbox Code Playgroud)

单次取

$user = $result->fetch_assoc();
$first_name = $user['first_name'];
Run Code Online (Sandbox Code Playgroud)

Nic*_*ick 5

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

while($row = $result->fetch_assoc()){
...
}
$result->data_seek(0);
while($row = $result->fetch_assoc()){
...
}
Run Code Online (Sandbox Code Playgroud)


Dha*_*man 5

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

$result = $data->get_result()->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)

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

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