2013-06-22 4 views
0

Поэтому у меня есть код:PHP - Почему while (mysql_fetch_array (mysql_query())) петли?

$sql = "SELECT * from users WHERE level = 2"; 
$result = mysql_query($sql); 
while($write = mysql_fetch_array($result)){ 
    echo ''.$write['username'].''; 
} 

Я хочу, чтобы сделать его более простым, так что я делать:

while($write = mysql_fetch_array(mysql_query("SELECT * from users WHERE level = 2"))){ 
echo ''.$write['username'].''; 
} 

Почему первый код не является бесконечность цикла и второй код?

+0

Поскольку 'mysql_query()' повторно запускается в каждом цикле. – mario

+3

Вопрос: почему это голубой? A: прочитайте документы – hek2mgl

+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ) –

ответ

4

первого код итерация ресурс, дается mysql_query($sql);

второй итерации запрос и загружает первую строку каждый раз, навсегда. , поэтому вместо перехода к следующей строке он создает новый запрос и запускается в этой строке.

В качестве примечания стороны - не используйте функции mysql_*. Используйте вместо этого mysqli_ или pdo.

+0

Спасибо за ваш ответ –

1

Это потому, что ваш запрос внутри, который сообщает while, чтобы выполнить запрос снова и снова. Если вы ищете гораздо более простой вариант, вы можете попробовать использовать ORM такой phpactiverecord.