Итерация цикла foreach работает только один раз - PullRequest
0 голосов
/ 30 ноября 2018
$sql = "SELECT * FROM table";
$rows = $db->prepare($sql);
$rows->execute();

foreach ($rows as $row) {
   echo($row);
}

echo("<br/>");
foreach ($rows as $row) {
   echo($row);
}

Если я запущу это, я получу первую строку arrayarrayarray (...), но вторая пуста.Есть ли способ, чтобы иметь возможность запустить это дважды?

РЕДАКТИРОВАТЬ: у меня была опечатка в этом посте, оригинальный вопрос стоит

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

$rows - подготовленный объект выписки.Этот объект реализует Traversable, поэтому вы можете использовать foreach для получения результатов, а не напрямую вызывать метод выборки.Но после того, как вы получили результаты один раз, вы не можете получить их снова.Вам нужно будет выполнить запрос еще раз или сохранить результаты в массиве во время первой итерации и использовать сохраненные результаты во второй раз, например так:

$sql = "SELECT * FROM table";
$rows = $db->prepare($sql);
$rows->execute();

foreach ($rows as $row) {
   $stored[] = $row;        // save the rows in an array
   echo($row);
}

echo("<br/>");
foreach ($stored as $row) {  // iterate the saved array instead of the statement
   echo($row);
}

Кроме того, я не уверен, какecho($row) работает здесь, так как я бы предположил, что $row будет массивом, но это не относится к делу.

0 голосов
/ 30 ноября 2018
foreach ($row as $row) {
   echo($row);
}

Я чувствую, что это проблема с печатанием и должна быть:

foreach ($rows as $row) {
   echo($row);
}

Так же, как ваш цикл выше этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...