Работа с MySQL (вывод данных из базы данных). Часть II
Давайте теперь попробуем вывести все записи, хранящиеся в нашей базе данных. Обратимся к базе данных со следующим кодом:
<html>
<body>
<?php
$db = mysql_connect("mysql12.leaderhost.ru", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>\n";
echo "<tr><td>Name</td><td>Position</tr>\n";
while ($myrow = mysql_fetch_row($result))
{
printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $myrow[1], $myrow[2], $myrow[3]);
}
echo "</table>\n";
?>
</body>
</html>
Вы вероятно заметили, что в данном коде вы ввели несколько новых функций и конструкций. Наиболее очевидной из них является цикл while(). Цикл говорит, что до тех пор, пока в переменной $result остается запись для выборки, ее необходимо извлечь с помощью функции mysql_fetch_row и присвоить переменной $myrow. А после этого выполнить код, что расположен внутри фигурных скобок "{}". Приглядитесь к коду внимательнее и разберитесь в этой конструкции.
Для понимания этого кода разберем понятие "массив". Выполнение функции mysql_query дает в результате массив, который хранится в переменной $result. Если представить этот массив схематически, то он будет выглядеть так:
0
id
1
first
2
last
3
address
4
position
Порядковый номер элемента массива
$result = 1 Bob Smith 128 Here St, Cityname Marketing Manager 0
2 John Roberts 45 There St ,Townville Telephonist 1
3 Brad Johnson 1/34 Nowhere Blvd, Snowston Doorman 2
Переменная $result является массивом. Причем не простым массивом, а двумерным. В нем содержатся три строки с номерами от 0 до 2. каждая из которых содержит 5 столбцов от 0 до 4. Для того, чтобы вывести на странице все записи, нам надо пройти от 0-й строчки массива до 2-й. Лучше всего это делать в цикле с помощью функции mysql_fetch_row (которая в переводе буквально означает - "выбрать ряд"). Функции mysql_fetch_row в качестве параметра подается массив $result. Функция выбирает из него строку, которую мы можем записать в переменную $myrow и автоматически переходит на следующую строку. Вызвав снова mysql_fetch_row, мы выберем следующую строку из массива, и так далее до тех пор, пока не достигнем конца массива. В этом случае mysql_fetch_row вернет значение false, которое послужит нам сигналом, что все записи выбраны и можно завершить цикл.
Теперь наша задача как-то вывести в теле цикла полученную запись. Выбранный ряд у нас хранится в
переменной $myrow. Она также, как и $result, является массивом, только одномерным. Схематически это выглядит так:
0
id
1
first
2
last
3
address
4
position
Порядковый
номер элемента
в массиве
$results
$myrow = 1 Bob Smith 128 Here St, Cityname Marketing Manager 0
А вот как будет выглядеть содержимое переменной $myrow при втором прохождении цикла:
0
id
1
first
2
last
3
address
4
position
Порядковый номер элемента в массиве
$results
$myrow = 2 John Roberts 45 There St ,Townville Telephonist 1
И наконец, при третьем:
0
id
1
first
2
last
3
address
4
position
Порядковый номер элемента в массиве
$results
$myrow = 3 Brad Johnson 1/34 Nowhere Blvd, Snowston Doorman 2
К каждому столбцу в массиве $myrow мы можем обратиться по его порядковому номеру, который заключается в квадратные скобки. Например, в первом цикле, $myrow[1] равно "Bob", во втором $myrow[4] равно "
Telephonist".
На первый взгляд процедура извлечения данных весьма сложна, но она вполне логически понятна и объяснима. Главное не забывайте, что элементы массивов нумеруются от 0, а не от 1, так как здесь мы имеем дело с компьютерной, а не человеческой логикой.
Далее, вывод переменных в HTML с помощью функции printf() - дело техники, уже знакомой нам по
предыдущему примеру. Наш код грешит одним недостатком: если в базе данных не будут найдены записи, удовлетворяющие нашему запросу, мы не получим никакого сообщения об этом. Неплохо было бы, чтобы программа выдавала какое-нибудь сообщение. Сделаем ее более дружественной.
Александр Качанов (kachanov@ogs.gomel.by)
Вадим Ткаченко (vvtk@stealthcomp.com) (http://web.stealthcomp.com)
Андрей Головин (mine@convex.ru) (http://exper.ural.ru)