сущность while

Таки одним ламерским вопросом больше.

Предположим выполняется такой код:

<?php

...

$result = mysql_query("SELECT * FROM table");

while ($data = mysql_fetch_assoc($result)) {

echo "\n<h1>" . $data['title'] . "</h1>\n<p>" . $data['text'] . "</p>";

}

?>

Вопрос: что происходит в процессе выполнения while?

Как мне представляется, сначала происходит запрос к базе (один раз) и потом полученные данные обрабатываются в процессе выполнения цикла. Так ли это? Или же каждая итерация = запрос к базе?

P.S. Вопрос нагрузки на БД.
 

AmdY

Пью пиво
Команда форума
Поросёнок Пётр
как ты думаешь, почему так?
PHP:
$result = mysql_query("SELECT * FROM table");
var_dump($result);
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Блин, программировать еще не научился, а уже оптимизирует что-то

Твой синтаксический анализатор, считывает скрипт и исполняет (грубо говоря) построчно, дошел до запроса к базе - выполнил, потом дошел до цикла - будет мусолить те операторы, что в теле цикла до тех пор, пока у тебя условие цикла будет равно true, потом дальше пойдет...
 
Поросёнок Пётр
как ты думаешь, почему так?
PHP:
$result = mysql_query("SELECT * FROM table");
var_dump($result);
Таки правильно думаю?

Пока копался в сущности var_dump'а наткнулся на http://dbug.ospinto.com/. Я так понимаю эдакий самодельный вариант последнего. Результат: вся запрашиваемая таблица отобразилась на странице.

Блин, программировать еще не научился, а уже оптимизирует что-то
Хочу все знать))
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Поросёнок Пётр
Преждевременная оптимизация - зло
 

newARTix

Новичок
Как мне представляется, сначала происходит запрос к базе (один раз) и потом полученные данные обрабатываются в процессе выполнения цикла. Так ли это?
Это так. Только это не сущность while, это сущность функции mysql_fetch_assoc, которая построчно достает уже полученные данные.
 

Фанат

oncle terrible
Команда форума
Пока копался в сущности var_dump'а наткнулся на http://dbug.ospinto.com/. Я так понимаю эдакий самодельный вариант последнего.
неправильно понимаешь.

Таки одним ламерским вопросом больше.
Как мне представляется, сначала происходит запрос к базе (один раз) и потом полученные данные обрабатываются в процессе выполнения цикла. Так ли это? Или же каждая итерация = запрос к базе?
Тебе правильно представляется.
Однако в $result у тебя действительно только указатель, а не вся таблица.

К "сущности while", как правильно заметил newARTix, вопрос отношения не имеет.
Тут вопрос во взаимодействии РНР и db API.
Вопрос хороший, особенно если рассматривать его в отрыве от вопроса про нагрузку.
В свое время меня он тоже в тупик ставил.
И до сих пор я не слишком хорошо представляю себе механику взаимодействия по линии DB - API - PHP

По теме полезно почитать про mysql_unbuffered_query
Для оптимизации нагрузки на БД надо запрашивать не SELECT * FROM table, а только те данные, которые реально нужны на странице.
 
Сверху