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
}