в то время как ($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 является количеством результатов


Править:

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

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

'делает mysql_fetch_array (), только возвращают одну строку каждый раз, когда это называют'

Я теперь счастливый, что мое понимание mysql_fetch_array () было v. неправильно!

спасибо за внимание!

11
задан Haroldo 4 June 2010 в 12:46
поделиться

7 ответов

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

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

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

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

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

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

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

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

21
ответ дан 3 December 2019 в 03:51
поделиться

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

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

1
ответ дан 3 December 2019 в 03:51
поделиться

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

Два примера:

Будет возвращена только первая строка

$row = mysql_fetch_array($result);

Будет возвращена одна строка в каждом цикле до тех пор, пока из набора результатов не перестанут быть доступны строки

while($row = mysql_fetch_array($result))
{
    //Do stuff with contents of $row
}
1
ответ дан 3 December 2019 в 03:51
поделиться

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

$result = mysql_query($query);  

возвращает ресурс базы данных php.

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

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) {  
    ...  
}  

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

1
ответ дан 3 December 2019 в 03:51
поделиться

Это зависит от того, сколько строк возвращается в $ results , и сколько столбцов содержится в $ row ?

1
ответ дан 3 December 2019 в 03:51
поделиться

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

1
ответ дан 3 December 2019 в 03:51
поделиться
$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'];
 }
}
0
ответ дан 3 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: