2014-11-27 3 views
2

У меня возникла проблема, потому что с помощью функции while(), но я решаю ее в течение пяти или шести часов сегодня. Я спрашиваю здесь, потому что я не понимаю, как это могло быть. Вот мой кодPHP while() не удается остановить цикл

$sql = mysql_query("SELECT saldo from stock where id >= '$id' and idItem = '$idItem';") 

если я пытаюсь:

$row = mysql_fetch_array($sql); 
while($row) 
{ // my code is here 
} 

затем, в то время как() не остановить цикл. но если я попробую вот так:

while($row = mysql_fetch_array($sql)) 
{//my code is here 
} 

этим кодом, я получаю правильный результат.

Я чувствую, что это небольшая сила, потому что я думаю, что первый и второй коды имеют одинаковую функцию. благодарит за вас комментарии или ответы!

+3

Ваш первый пример цикл бесконечно, потому что вы каждый раз проверяете одно и то же значение. Второй пример меняет значение на каждой итерации. –

+0

«Я чувствую, что это небольшая сила, потому что я думаю, что первый и второй коды имеют одинаковую функцию». : Первая и вторая строки не имеют одинаковой функции. Вообще. Если вы выбираете ровно одну строку, то вам не следует использовать цикл. –

ответ

1

mysql_fetch_array() извлекает одну строку сразу, когда вы используете, пока она выбирает следующую строку каждый раз. Он возвращает true, если есть какая-либо следующая строка для извлечения и false, если нет.

Для предотвращения бесконечного цикла используйте это правильный синтаксис для выборки:

while($row = mysql_fetch_array($sql)) 
{ 
    //your code 
} 

Примечание:original MySQL extension теперь осуждается, и будет генерировать ошибки E_DEPRECATED при подключении к базе данных. Вместо этого использовать MySQLi или PDO_MySQL расширения

0

$row не затронутым цикла, поэтому, конечно, он продолжает цикл. Вы, наверное, хотите что-то вроде этого:

while($row = mysql_fetch_array($sql)) 
{ // processing code goes here 
} 
0

В вашем первом фрагменте, условие цикла всегда true, так как значение $row никогда не меняется, и вы в конечном итоге в бесконечном цикле.

Во втором фрагменте, $row повторно назначается при каждой итерации цикла, и как только это null (как правило, в конце записей в случае mysql_fetch_array) цикл завершается.

+0

Спасибо за хороший ответ. Теперь меня поняли. ....: D: D – dede

0

Поскольку первый код каждый раз использует одну и ту же строку $, цикл никогда не останавливается и даже не получает результат за каждую итерацию. Но второй код получает результат каждый раз, цикл работает так, как вы ожидали.

0

Причина, по которой вторая в конечном итоге останавливается, заключается в том, что каждый вызов mysql_fetch_array() вызовет следующую строку из запроса к базе данных. Как только все строки будут вызваны, он начнет возвращать false, и это заканчивает цикл.

Это может быть немного запутанным, потому что вы не видите никакого счетчика, но счетчик действительно скрыт внутри функции mysql_fetch_array() и в конечном итоге закончится.

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

0
$row = mysql_fetch_array($sql); 
    while($row) 
    { // my code is here 
    } 

mysql_fetch_array получает 1 и только 1 строка из таблицы в $ строке, поэтому если у вас есть один ряд, соответствующий запрос вам не нужно какое-то время

если полученный запрос содержит более 1 строку, которую нужно чтобы сделать какое-то время к mysql_fetch_array, как это:

 while($row=myql_fetch_array($sql){} 

теперь вы можете получить все строки из таблицы

0

значение $row не изменяется в го первый случай. Вам нужно будет обновить его еще раз в течение цикла с другим назначением, поэтому ваше второе утверждение лучше, так как он делает все это на одном дыхании :)

0

Для -

$row = mysql_fetch_array($sql); 
while($row) 
{ // my code is here 
} 

$row всегда верно как это содержит значения, поэтому цикл будет выполняться бесконечно. И

while($row = mysql_fetch_array($sql)) 
{//my code is here 
} 

$row является ры недо mysql_fetch_arrya имеет значения.

mysql устарел. Попробуйте вместо этого использовать mysqli или PDO.

-4

Попробуйте этот код:

У вас есть точка с запятой в запросе .. ваша точка с запятой должна быть в конце mysql_query() функции. Это может быть причиной бесконечного цикла цикла while.

$sql = mysql_query("SELECT saldo FROM stock WHERE id >= '$id' AND idItem = '$idItem'"); 
+1

Полностью широкий знак. См. Мой комментарий выше или любой другой ответ. –

+0

Точки с запятой являются действительной частью синтаксиса SQL. Поскольку 'mysql_query' разрешает только одиночные SQL-запросы, они являются необязательными (и специально рекомендованными), но все же действительны. –

+0

Спасибо всем, я понял сейчас ....: D: D: D – dede

Смежные вопросы