Цикл while для выборки из базы?

Добрый вечер! Объясните чем плох данный подход? Я имею ввиду то, что здесь для выборки из базы используется цикл while и какие есть альтернативы? Спасибо!

<?php
$cnn = mysqli_connect("host","user","pass","db");
$query = "SELECT * FROM `my_sql_table`";
$res = mysqli_query($cnn,$query);
while($row = mysqli_fetch_array($res))
{
echo "Номер: ".$row['id']."
\n";
echo "Имя: ".$row['firstname']."
\n";
echo "Фамилия: ".$row['surname']."
\n";
}
?>
  • Вопрос задан
  • 637 просмотров
Решения вопроса 2
alexprik07
@alexprik07
Программист, верстальщик.
Чем вам плох данный пример? Довольно таки классическое решение. Можно заменить на FOR, но тогда не будет, так наглядно. do ... while может наоборот всё испортить, так как если даже выборка будет пустая, всё равно выполнится и выведет вам:

Номер: *
Имя: *
Фамилия: *

Звёздочками отметил, то где вам PHP выведет предупреждения, если включён вывод всех сообщений об ошибках.
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Извините, я прерву предыдущих ораторов, создалось впечатление что автор не совсем то же что отвечающие имел в виду, и, если я верно понял вопрос, отвечу:

Для ВЫБОРКИ из базы здесь НЕ ИСПОЛЬЗУЕТСЯ цикл, цикл используется для вывода РЕЗУЛЬТАТОВ ВЫБОРКИ из базы, весь набор уже получен и теперь только выводится в цикле. Выборка осуществляется в строке
$res = mysqli_query($cnn,$query);
после этого в $res хранится ссылка на ресурс со всей выборкой.
mysqli_fetch_array($res) создает массив из строчки, на которую в данный момент указывает внутренний указатель и переводит данный указатель на следующую строку выборки. RTFM. И да пребудет с Вами сила чтения мануала )

А делать запрос в цикле - да, дурной тон и дурная идея.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
а кто сказал что плох?

PS: плохо только mysqli_ mysql_ использовать...
Ответ написан
@krypt3r
Видимо, речь шла о том, что mysqli используется точно так же, как использовался mysql — разницы в коде никакой, только буковка i в вызове функций добавилась. Если в запрос не подставляются данные пользователя, использование mysqli_query(), модет быть, и оправдано. Но в ином случае следует юзать prepared statements (prepare(), bind_param(), execute()).
Все то же самое касается не только mysqli, но и PDO. Тут на тостере немало было говнокода аля mysql_xxx, заменили только функции mysql_xxx на методы PDO
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы