2016-10-15 3 views
0

Я в настоящее время новичок в php и изучаю, но после выполнения небольшого теста я знаю, что while не может использоваться дважды, но я не уверен, как точно его сбросить.
Я вижу, что в некоторых сценариях люди используют reset($variable), но это, похоже, не работает в моем случае.
В случае, если это имеет значение, я пытаюсь использовать mysqli, чтобы вернуть свое раскрывающееся меню в качестве выбора, первое работает, но второе не работает вообще.php using while double

<?php 
        echo '<select>'; 
        while(list($stateID, $stateName) = $result->fetch_row()) 
        { 
       echo '<option value="$stateName">'; 
       echo "$stateName"; 
       echo '</option>'; 
        } 
        echo '</select>'; 
        ?> 
       <br> 
       <br> 
       To: &nbsp; &nbsp; 
      <?php 
       echo '<select>'; 
        while(list($stateID, $stateName) = $result2->fetch_row()) 
        { 
       echo '<option value="$stateName">'; 
       echo "$stateName"; 
       echo '</option>'; 
        } 
      echo '</select>'; 
        ?> 

Кроме того, в случае, если это необходимо, вот мои результаты по поиску в mysql.

<?php 
include 'connect.php'; 
$query = "SELECT * FROM LOCATION"; 
$result = $mysqli->query($query, MYSQLI_STORE_RESULT); 
$result2 = $mysqli->query($query, MYSQLI_STORE_RESULT); 
if(!$result) { 
    echo($mysqli->error); 
    exit(); 
} 
?> 

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

ответ

0

Что вы делаете в этих операциях while, перешагивает список строк, полученных из базы данных. Это правда, что вы не можете перебирать по списку дважды *, так что вы можете попробовать что-то другое: перечислите по списку один раз и сохраните результаты, чтобы вы могли его повторно использовать. Например:

ли это после того, как вы запрос к базе данных:

$data = []; 
while(list($stateID, $stateName) = $result->fetch_row()) 
{ 
    $data[] = [ 'stateID' => $stateID, 'stateName' => $stateName ]; 
} 

Все, что я сделал здесь итерированным над списком строк и сохраненных данных в переменную. Теперь вы можете использовать переменную вместо того, чтобы пытаться получить доступ к результатам MySQL:

echo '<select>'; 
foreach ($data as $d) { 
    echo '<option value="'.$d['stateName'].'">"; 
    echo $d['stateName']; 
    echo '</option>'; 
} 

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

* Может быть возможно сбросить указатель на набор результатов MySQL, но мой подход более простой и (возможно) работает немного лучше, поскольку вы скопировали данные, которые хотите, в простой старый массив PHP