если...
$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() выполняет цикл, поэтому меня интересует, если использовать 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
делает одно и то же. У вас есть только столько циклов, сколько вы написали. Однако обе конструкции делают не одно и то же. Вторая будет действовать только на одну строку результата, в то время как первая будет перебирать все строки.
Для первого варианта: ваша программа будет проходить через цикл один раз для каждой строки в наборе результатов, возвращенных запросом. Вы можете заранее узнать количество результатов, используя mysql_num_rows()
.
Для второго: на этот раз вы используете только одну строку из набора результатов и делаете что-то для каждого из столбцов. Именно это и делает языковая конструкция foreach
: она проходит через тело цикла для каждой записи в массиве $row
. Количество раз, которое программа пройдет через цикл, известно заранее: он пройдет один раз для каждого столбца в наборе результатов (что предположительно вам известно, но если вам нужно определить это, вы можете использовать count($row)
).
Да, 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.
Вторая строка
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) {
...
}
Вы получите первую строку из запроса, и вы будете перебирать все столбцы в первом результате запроса.
Это зависит от того, сколько строк возвращается в $ results
, и сколько столбцов содержится в $ 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'];
}
}