За последние 24 часа нас посетили 21976 программистов и 1099 роботов. Сейчас ищут 739 программистов ...

Цикл While не срабатывает второй раз от объекта mysqli_result

Тема в разделе "PHP для новичков", создана пользователем SamyRed, 4 апр 2021.

Метки:
  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Здравствуйте!
    PHP:
    1. $positions = false;
    2. $q = $db->query ("SELECT * FROM `positions` WHERE `company_id` = '".$company_id."'");
    3. if ($q) {
    4.     if ($q->num_rows) {
    5.         $positions = $q;
    6.     }
    7. }
    Затем вызов цикла While от объекта "$positions":
    PHP:
    1. <?php
    2. if ($positions !== false) {
    3. ?>
    4.             <select class="form-select" name="position" aria-label="Choose position">
    5.                 <option selected>_POSITION</option>
    6. <?php
    7.     while ($item = $positions->fetch_assoc ()) {
    8. ?>
    9.                 <option value="<?=$item['id']?>"><?=$item['title']?></option>
    10. <?php
    11.     }
    12. ?>
    13.             </select>
    14. <?php
    15. }
    16. ?>
    Тут всё работает как надо.
    Вот второй вызов, он ничем не отличается от первого:
    PHP:
    1. <?php
    2.             if ($positions !== false) {
    3. ?>
    4.                 <form>
    5.                     <select class="form-select" name="position" aria-label="Choose position">
    6.                         <option selected><?=$position?></option>
    7. <?php
    8.                 while ($item = $positions->fetch_assoc ()) {
    9. ?>
    10.                         <option value="<?=$item['id']?>"><?=$item['title']?></option>
    11. <?php
    12.                 }
    13. ?>
    14.                     </select>
    15.                 </form>
    16. <?php
    17.             } else {
    18. ?>
    19.             <?=$position?>
    20. <?php
    21.             }
    22. ?>
    А вто он уже не отрабатывает. var_dump ($positions) как перед первым так и перед вторым вызовом показывает одинаковый результат. Если удалить первый вызов, то второй работает. Как так?
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    У объекта mysqli_result есть внутренний указатель, который нужно сбрасывать:
    https://gency.ru/comment/57
     
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Понял, спасибо. Не знал.