Повторите, пока с тем же SELECT - PullRequest
2 голосов
/ 15 марта 2019

Почему я не могу использовать один и тот же while дважды?

Я хотел бы повторить то же самое, находясь на странице, и не могу, просто загрузите первый.

Пример:

$rs = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$row = $rs->fetch_assoc();

Пока 1 (расположен в верхней части сайта)

<?php do{ ?>
    <option value="<?php echo $ID; ?>">
        <?php echo $nome; ?>
    </option>
<?php } while ($row = $rs->fetch_assoc()); ?>

Пока 2 (расположен в конце сайта)

<?php do{ ?>
    <option value="<?php echo $ID; ?>">
        <?php echo $nome; ?>
    </option>
<?php } while ($row = $rs->fetch_assoc()); ?>

Спасибо.

Ответы [ 3 ]

3 голосов
/ 15 марта 2019

Вместо этого сохраняйте результаты в массиве и зацикливайте их там, где это необходимо.В противном случае вам нужно будет сбросить курсор вашего результата перед повторным циклом.

$query = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$result = $query->fetch_all(MYSQLI_ASSOC);

// Loop wherever needed
foreach ($result as $r) {
    // Use $r
}

// Loop the result again!
foreach ($result as $r) {
    // Use $r
}

Также рекомендуется использовать подготовленный оператор вместо прямого запроса с введенными в него переменными.

2 голосов
/ 15 марта 2019

Когда вы делаете $rs->fetch_assoc(), вы вытаскиваете строки из массива результатов, чтобы использовать, когда с этим условием несколько раз, вам нужно снова заполнить $rs, выполнив запрос еще раз до того момента, или я рекомендую сохранить ваш результат в другой переменной и использовать его в любое время, как это

$result = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$rs = $result;
$row = $rs->fetch_assoc();

//WHILE 1
<?php do{ ?>
<option value="<?php echo $ID; ?>">
      <?php echo $nome; ?>
</option>
<?php } while ($row = $rs->fetch_assoc()); ?>
//$rs is empty now

$rs = $result; //setting $rs again
//WHILE 2
    <?php do{ ?>
    <option value="<?php echo $ID; ?>">
          <?php echo $nome; ?>
    </option>
    <?php } while ($row = $rs->fetch_assoc()); ?>
1 голос
/ 15 марта 2019

Первый цикл потребляет все данные в MySQL.

Итак, второй цикл не имеет ничего для потребления.

Что вы можете сделать:

Получить вседанные из первого цикла в одном массиве.

Используйте их во второй раз.

Кроме того, вы увеличиваете число обращений к серверу между PHP и MySQL.

Вы всегда должны стремиться уменьшитьОтключения на PHP и MySQL.

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