While ($ row = mysql_fetch_array ($ result)) - сколько циклов выполняется?

если...

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100"
$result = mysql_query($query);

для этого действия:

while ($row = mysql_fetch_array($result)){
   ....
}

- это выполнение 1 цикла (итерация x раз)?

и для этого:

$row = mysql_fetch_array($result)
foreach($row as $r){
   ...
}

- это выполнение 2 циклов (итерация x раз)?

где x - число результатов


EDIT:

ok спасибо, ребята, хорошо, я в основном сформулировал этот вопрос на самом деле, очень плохо.

В ретроспективе это должно было быть

'mysql_fetch_array() возвращает только один строка каждый раз, когда она называется "

Теперь я счастлив, что мое понимание mysql_fetch_array() было неверным!

спасибо за ваше время!

Ответ 1

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

Нет. mysql_fetch_array просто возвращает следующую строку результата и продвигает внутренний указатель. Он не зацикливается. (Внутри он может или не может использовать какой-то цикл где-то, но это не имеет значения.)

while ($row = mysql_fetch_array($result)) {
   ...
}

Это делает следующее:

  • mysql_fetch_array извлекает и возвращает следующую строку
  • строка присваивается $row
  • выражение оценивается и, если оно оценивается как true, выполняется содержимое цикла
  • процедура начинается заново
$row = mysql_fetch_array($result);
foreach($row as $r) {
    ...
}

Это делает следующее:

  • mysql_fetch_array извлекает и возвращает следующую строку
  • строка присваивается $row
  • foreach пересекает содержимое массива и выполняет содержимое цикла столько раз, сколько есть элементов в массиве

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

Ответ 2

Это зависит от количества строк, возвращаемых в $results, и количества столбцов в $row?

Ответ 3

Учитывая, что возвращается только одна строка, в обоих случаях будет выполняться только один цикл. Хотя он будет проверять, чтобы цикл вводил условие дважды на каждый.

Ответ 4

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

Для второго: на этот раз вы используете только одну строку набора результатов, и вы делаете что-то для каждого из столбцов. Это то, что делает конструктор языка foreach: он проходит через тело цикла для каждой записи в массиве $row. Количество раз, когда программа будет проходить через цикл, известно заранее: она будет проходить один раз для каждого столбца в наборе результатов (что, по-видимому, вы знаете, но если вам нужно его определить, вы можете использовать count($row)).

Ответ 5

Первая строка:

$result = mysql_query($query);  

вернуть ресурс php db.

Вторая строка

while ($row = mysql_fetch_array($result))  

Задает все записи, возвращаемые запросом.

Используйте mysql_fetch_assoc вместо
В этом случае строка имеет пары ключ = > значение.
В то время как просто положил это:
print_r($row), и вы поймете
Если вы используете mysql_fetch_assoc, формат строки будет:

$row["column1_name"] = column1_value;  
$row["column2_name"] = column2_value;  

Для этого:

$row = mysql_fetch_assoc($result)  
foreach ($row as $columnName => $columnValue) {  
    ...  
}  

Вы получите первую строку из запроса, и вы будете перебирать все столбцы в первом результате запроса.

Ответ 6

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100"
$result = mysql_query($query);
if(mysql_num_rows($result)>0)
{
 while($row = mysql_fetch_array()) //here you can use many functions such as mysql_fetch_assoc() and other
 {
//It returns 1 row to your variable that becomes array and automatically go to the next result string
  Echo $row['col1']."|".Echo $row['col2']."|".Echo $row['col2'];
 }
}

Ответ 7

Да, mysql_fetch_array() возвращает только один результат. Если вы хотите получить более одной строки, вам нужно поместить вызов функции в цикл while.

Два примера:

Это вернет только первую строку

$row = mysql_fetch_array($result);

Это вернет одну строку для каждого цикла, пока из набора результатов не будет больше строк

while($row = mysql_fetch_array($result))
{
    //Do stuff with contents of $row
}