While php mysql query

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

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

$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»;
>
?>

alexprik07

Чем вам плох данный пример? Довольно таки классическое решение. Можно заменить на FOR, но тогда не будет, так наглядно. do . while может наоборот всё испортить, так как если даже выборка будет пустая, всё равно выполнится и выведет вам:

Звёздочками отметил, то где вам PHP выведет предупреждения, если включён вывод всех сообщений об ошибках.

Много раз видел на тостере как такой подход ругали, правда аргументов по этому поводу тоже приведено не было, в любом случае спасибо!

alexprik07

Андрей Бойченко: не за что. Почитайте, про циклы.

Это же типо мат. часть 😉 Вы их плохо понимаете.

ThunderCat

Извините, я прерву предыдущих ораторов, создалось впечатление что автор не совсем то же что отвечающие имел в виду, и, если я верно понял вопрос, отвечу:

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

А делать запрос в цикле — да, дурной тон и дурная идея.

Читайте также:  Php вывести весь массив foreach

Источник

Оцените статью