Как я могу использовать mysqli fetch_asso c () несколько раз с подготовленными инструкциями на одной и той же странице PHP? - PullRequest
1 голос
/ 19 января 2020

Есть ли способ разрешить использование fetch_assoc() несколько раз на одной странице с подготовленными утверждениями?

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

Я хотел бы иметь возможность использовать fetch_assoc() на одной и той же странице столько раз, сколько я хочу, столько раз, сколько я хочу. Если я захочу дважды набрать oop, я смогу это сделать. Если я захочу l oop и сделать одну выборку, я тоже смогу это сделать. Сейчас кажется, что, если fetch_assoc() используется один раз, его нельзя использовать снова на той же странице.

В целом oop

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

Одиночная выборка

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

Ответы [ 2 ]

3 голосов
/ 19 января 2020

Хотя технически возможно (Ник показывает, как) перематывать объект mysqli_result, многим людям вообще неудобно работать с mysqli_result. Намного проще извлечь все записи в массив PHP и работать с многомерным массивом вместо объекта mysqli_result.

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

Таким образом, вы можете делать с этим массивом все, что захотите. Вы можете фильтровать, вы можете l oop много раз, вы можете использовать все стандартные функции массива в PHP.

$resultsFiltered = array_filter($results, fn($e) => $e['someColumn']>200);
foreach($resultsFiltered as $row) {
    // only records with someColumn > 200
}
1 голос
/ 19 января 2020

Вы можете использовать mysqli_result::data_seek для сброса указателя результата после каждого использования, чтобы вы могли l oop просматривать результаты несколько раз. Например:

while($row = $result->fetch_assoc()){
...
}
$result->data_seek(0);
while($row = $result->fetch_assoc()){
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...