если…
$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. Неверным!
Спасибо за ваше время!
Я предполагаю 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
делает то же самое. Вы пишете столько циклов. Однако обе конструкции не делают то же самое. Второй будет действовать только на одну строку результата, тогда как первая будет перебираться по всем строкам.
Это зависит от количества строк, возвращаемых в $results
, и количества столбцов в $row
?
Учитывая, что возвращается только одна строка, в обоих случаях будет выполнен только один цикл. Хотя он будет проверять, чтобы цикл вводил условие дважды по каждому.
Для первого: ваша программа пройдет цикл один раз для каждой строки в результирующем наборе, возвращаемом запросом. Вы можете заранее знать, сколько результатов есть с помощью mysql_num_rows()
.
Для второго: на этот раз вы используете только одну строку набора результатов, и вы делаете что-то для каждого из столбцов . Это то, что делает конструкция языка foreach
: она проходит через тело цикла для каждой записи в массиве $row
. Количество раз, когда программа будет проходить через цикл, известно заранее: она будет проходить один раз для каждого столбца в наборе результатов (который, предположительно, вы знаете, но если вам нужно его определить, вы можете использовать count($row)
) ,
$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']; } }
Да, mysql_fetch_array()
возвращает только один результат. Если вы хотите получить более одной строки, вам нужно поместить вызов функции в цикл while.
Два примера:
Это приведет только к возврату первой строки
$row = mysql_fetch_array($result);
Это вернет одну строку в каждом цикле, пока в результирующем наборе не будет больше строк
while($row = mysql_fetch_array($result)) { //Do stuff with contents of $row }
Первая строка:
$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) { ... }
Вы получите первую строку из запроса, и вы будете перебирать все столбцы в первом результате запроса.