mysql_fetch_array; Вывод из базы данных;

tempin

Новичок
Добрый день.
Имеется база данных, имеется sql запрос, находящийся в переменной $sql.
В результате работы должный выдаваться, к примеру, значения поля ID всех строк, отсортированных sql запросом.

Реализовывается это следующим кодом:
...
$result = mysql_query($sql);

while($myrow=mysql_fetch_array($result))
{
echo $myrow['id'];
echo "<br>";
}

Вопросы:
1) По какому принципу работает цикл while в данном примере? В мануале: The meaning of a while statement is simple. It tells PHP to execute the nested statement(s) repeatedly, as long as the while expression evaluates to TRUE.
Код выполняется, пока условие верно. Но что есть условие? По идеи, вот оно:$myrow=mysql_fetch_array($result). Значение одной переменной присваивается другой, где здесь условие? a<b - условие, i==2 - условие, а x=b - это что вообще?
2) Почему цикл работает? Почему если просто написать оператор print_r mysql_fetch_array($result) выдается лишь одна строка из БД, которая стоит выше всех остальных, соответствующих условию запроса?

Конечная задача заключается в том, чтобы получить некий четкий структурированный массив [n][m], где n - количество отсортированных строк, m - количество полей в таблице. Значения массива - соответственные значения из БД. То есть, короче говоря, требуется "переместить" нужные строки из бд в массив.
 

WMix

герр M:)ller
Партнер клуба
PHP:
if($a=false){ // присвоение возвращает то что было присвоенно!
 echo "это не будет видно!";
}
else{
 echo "это будет видно!";
}
 

Фанат

oncle terrible
Команда форума
Вот ведь. пропустил такой хороший вопрос.
Но что есть условие? По идее, вот оно:$myrow=mysql_fetch_array($result).
Очень хороший вопрос.
Практически 100% новичков путают два класса операторов - операторы сравнения и управляющие операторы, не умея отделить одно от другого.
поэтому очень важно понять, что управляющие операторы не работают с условиями. Они работают с булевыми значениями.
Если значение равно TRUE - переход происходит, если FALSE - то нет.

А вот это самое булево значение может возвращаться чем угодно - не только операторами сравнения, но и вообще практически любыми выражениями - переменными,функциями, сложными выражениями.

На примере оператора if это удобнее показывать.
Мы привыки писать в одну строчку,
PHP:
if ($name == 'vasya') ...
хотя на самом деле это два оператора:
PHP:
$bool = $name == 'vasya'; // получаем результат оператора сравнения ==
if ($bool) ...// совершаем или не совершаем переход
В случае с while в две строчки написать не получится - только если писать do .. while.
Но это и не требуется - на две мы разбивали только для большей понятности.

В общем, надеюсь, теперь ясно, что while, как и if, работает с булевым выражением.
А дальше надо понимать специфику РНР как языка с нечеткой типизацией. В нем практически любое выражение может быть приведено к булевому.
К примеру, непустой массив автоматически приводится к TRUE.

Итак, что мы имеем в итоге?
Выражение
PHP:
$myrow=mysql_fetch_array($result)
возвращает в переменную $myrow либо непустой массив, либо FALSE.
дальше while проверяет $myrow. Если TRUE (или приравноенное к нему в правах значение) - идём на следующий оборот
Если FALSE - вылетаем.
 

_AND_

Новичок
Добрый день!
Не могу понять в чем дело. Решил не создавать новую тему, а продолжить текущую, так как по смыслу подходит, возможно кто-то со мной и не согласится.
По какой-то причине не получается первый ассоциативный массив, хотя запрос к базе данных проходит. Остальные, которые идут за ним создаются успешно.
PHP:
while ($res_tab = mysql_fetch_array($ath_tab, MYSQL_ASSOC)
Скрипт формирует таблицу заказа из строки, где первое значение id товара, а второе его количество.

PHP:
$query_tab="SELECT * FROM `goods` WHERE id_1= '$val'";
echo "query_tab:  ".$query_tab."<br>"; //вывожу значение запроса
$ath_tab=mysql_query($query_tab);

if ($ath_tab){
    echo "Запрос выполнен успешно.<br>"; //проверяю успешность его создания}
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
эх, еслиб понять что ты хочешь, написав трудно-понимаемый вопрос, с кучей лишней информации, утверждением о "не получении первого ассоциативного массива", без проверки/доказательстве, в двух неоконченных/ошибочных обрывках кода, в давно забытом топике.

попробуй это http://phpfaq.ru/debug
 
Последнее редактирование:

Work

Новичок
Ребят подскажите пожалуйста, как мне сделать так чтоб выводила сообщение если в бд есть хоть одна запись то выводило ее, а если нет не одной записи то выводило сообщение что нет записей срочно надо плиз
 
Сверху