#php #mysqli
#php #mysqli
Вопрос:
В настоящее время я новичок в php и учусь, но после небольшого тестирования я знаю, что while
его нельзя использовать дважды, но я не уверен, как его точно сбросить.
Я вижу, что в некоторых сценариях люди используют reset($variable)
, но, похоже, в моем случае это не работает.
В случае, если это имеет значение, я пытаюсь использовать mysqli
для возврата выпадающего меню в качестве выбора, первое работает, но второе не работает вообще.
<?php
echo '<select>';
while(list($stateID, $stateName) = $result->fetch_row())
{
echo '<option value="$stateName">';
echo "$stateName";
echo '</option>';
}
echo '</select>';
?>
<br>
<br>
To: amp;nbsp; amp;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, но у меня такое чувство, что это неправильный путь, особенно в том случае, если мне нужно повторно использовать один и тот же код снова и снова.
Ответ №1:
То, что вы делаете в этих 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