Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в Веб программирование.doc
Скачиваний:
81
Добавлен:
07.11.2018
Размер:
4.42 Mб
Скачать

Выборка данных из таблиц бд

Создать соединение с MySQL.

int mysql_connect(string hostname, string username, string password);

Выбрать базу данных для работы.

int mysql_select_db(string database_name, int link_identifier);

SQL запрос к базе данных на выборку данных.

int mysql_query(string query, int link_identifier);

Функция возвращает ID результата или 0, если произошла ошибка.

Закрытие соединения с MySQL.

int mysql_close(int link_identifier);

Выборка данных из базы производится SQL командой SELECT.

В PHP имеются ряд функций, позволяющих сохранять и обрабатывать данные, на которые указывает дескриптор, $result=mysql_query(“SELECT …”);

int mysql_result(int result, int i, column);

Функция возвращает значение поля в столбце column и в строке i.

int mysql_num_rows(int result);

Функция возвращает количество строк в результате запроса.

mysql_fetch_row($result))

Возвращает массив соответствующий очередной записи таблицы

mysql_fetch_array(result)

Возвращает результаты запроса в виде ассоциированного массива

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

$str= mysql_result($result,0,"first");

printf("First Name: %s<br>\n",$str);

$str= mysql_result($result,0,"last");

printf("Last Name: %s<br>\n",$str);

$str= mysql_result($result,0,"address");

printf("Address: %s<br>\n",$str);

$str= mysql_result($result,0,"position");

printf("Position: %s<br>\n",$str);

mysql_close($db);

?>

Функция mysql_connect() открывает связь с сервером баз данных MySQL. В результате выполнения этой функции получаем значение идентификатора соединения, которое присваиваем переменной $db. C помощью функции mysql_select_db() выбираем базу данных. В качестве параметров передаем название нужной нам базы данных и идентификатор соединения, полученный нами при выполнении предыдущей команды.

В результате выполнения функции mysql_select_db() получаем значение true, если соединение с базой данных произошло успешно иначе false. Наконец, мы обращаемся к базе данных с запросом на языке SQL. Для этого служит функция mysql_query(). Результаты выполнения функции mysql_query() – записи, удовлетворяющие нашему запросу - помещаем в переменную $result.

С помощью функции mysql_result() извлекаем из переменной $result, первую запись (порядковый номер 0), и значение определенного поля (по его имени). Перебирая друг за другом записи, выберем все записи, что хранятся в базе данных.

Далее мы познакомимся с более интеллектуальными, чем mysql_result(), функциями выборки данных из БД mysql_fetch_row() и mysql_fetch_array(). Попробуем вывести все записи, хранящиеся в нашей базе данных. Обратимся к базе данных со следующим кодом:

<html>

<body>

<?php

$db = mysql_connect("localhost", "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_fetch_row в качестве параметра подается массив $result. Функция выбирает из него строку, которую мы можем записать в переменную $myrow и автоматически переходит на следующую строку. Вызвав снова mysql_fetch_row, мы выберем следующую строку из массива, и так далее до тех пор, пока не достигнем конца массива. В этом случае mysql_fetch_row вернет значение false, которое послужит сигналом, что все записи выбраны и можно завершить цикл.

Теперь наша задача как-то вывести в теле цикла полученную запись. Выбранный ряд у нас хранится в переменной $myrow. Она также, как и $result, является массивом, только одномерным. На первый взгляд процедура извлечения данных весьма сложна, но она вполне логически понятна и объяснима. Главное не забывайте, что элементы массивов нумеруются от 0, а не от 1, так как здесь мы имеем дело с компьютерной, а не человеческой логикой. Наш код грешит одним недостатком: если в базе данных не будут найдены записи, удовлетворяющие нашему запросу, мы не получим никакого сообщения об этом. Неплохо было бы, чтобы программа выдавала какое нибудь сообщение. Сделаем ее более дружественной. Взгляните на следующий код:

Пример: Соединение с БД и выборка записей

<?// php428bd.php - скрипт создает БД и таблицу

$dbName ="mydb";

/* создать соединение */

$link = mysql_connect("localhost", "valera", "12345")

or exit("Could not connect");

mysql_select_db("$dbName",$link) or die("Не могу выбрать базу данных ");

//создать SQL - запрос

$sqlq="Select * from students";

//

$result = mysql_query($sqlq,$link) or die ("Invalid query");

$myrow=mysql_fetch_array($result); //установка первой записи

echo $myrow["name"];//вывод поля “name” первой записи

do//цикл просмотра всех записей

{

echo “сотрудник-”, $myrow[‘id’];

echo $myrow["name"];

}

while($myrow=mysql_fetch_array($result));

MYSQL_CLOSE();/* Закрыть соединение */

?>

<html>

<body>

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

if ($myrow = mysql_fetch_array($result))

{

echo "<table border=1>\n";

echo "<tr><td>Name</td><td>Position</td></tr>\n";

do

{

printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow["first"], $myrow["last"],

$myrow["address"]);

}

while ($myrow = mysql_fetch_array($result));

echo "</table>\n";

}

else

{

echo "Sorry, no records were found!";

}

?>

</body>

</html>

В данном коде вместо функции mysql_fetch_row() мы использовали функцию mysql_fetch_array(). Она работает точно так же, как и mysql_fetch_row() за одним замечательным исключением: с помощью этой функции мы можем обращаться к каждому полю массива не по номеру, а по имени. Например, если раньше для получения имени нам приходилось писать $myrow[1] (1 – второй столбец массива), то теперь мы можем писать $myrow["first"] ("first" – название столбца в базе данных и в массиве). Второй вариант естественно гораздо информативнее и удобнее. Кроме этого, в коде использован цикл do/while и условная конструкция if-else. Выражение if-else говорит, что если мы можем присвоить значение $myrow, то надо начать выборку, в противном случае мы понимаем, что записей нет, переходим к блоку else и выводим соответствующее сообщение. Чтобы проверить, как работает эта часть кода, замените SQL-выражение на "SELECT * FROM employees WHERE id=6" или на какое-нибудь другое, которое не даст результата.

Сейчас мы поработаем со параметрами запроса. Как вы уже наверняка знаете, существует три способа передачи параметров запроса. Первый, использовать метод GET в форме (с ним мы разобрались в главе "Работа с формами"). Второй – набрать параметры прямо в адресной строке броузера. И третий, это вставить параметры в обычную ссылку на странице. То есть сделать ссылку примерно такого вида

<a href="http://my_machine/mypage.php3?id=1">

Для начала, давайте обратимся к базе данных и выведем список персонала. Взгляните на следующий код.

<html>

<body>

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

if ($myrow = mysql_fetch_array($result))

{

do

{

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],$myrow["first"],

$myrow["last"]);

}

while ($myrow = mysql_fetch_array($result));

}

else

{

echo "Sorry, no records were found!";

}

?>

</body>

</html>

Все вам должно быть знакомо, кроме функции printf(). Поэтому, давайте рассмотрим ее поближе. Во-первых, обратите внимание на обратные косые черты. Они говорят PHP-движку, что необходимо вывести символ, следующий за чертой, а не рассматривать его, как служебный символ или как часть кода. В данном случае это касается кавычки, которая нам нужна в тексте ссылки, но для PHP является символом окончания текстовой строки.

Далее, в коде используется интересная переменная $PHP_SELF. В этой переменной всегда хранится имя и URL текущей страницы. В данном случае эта переменная важна для нас потому, что мы хотим через ссылку вызвать страницу из нее самой. То есть вместо того, чтобы делать две страницы, содержащие разные коды для разных действий, мы все действия запихнули в одну страницу. С помощью условий if-else мы будем переводить стрелки с одного кода на другой, гоняя одну и ту же страницу по кругу. Это конечно увеличит размер страницы и время, необходимое на ее обработку, но в некоторых случая, такой трюк очень удобен. Переменная $PHP_SELF гарантирует нам, что наша страница будет работать даже в том случае, если мы перенесем ее в другой каталог или даже на другую машину. Как мы уже сказали, ссылки, сгенерированные в цикле ссылаются на ту же самую страницу, только к имени самой страницы на лету добавлена некоторая информация: переменные и их значения. Переменные, которые передаются в строке-ссылке, автоматически создаются PHP-движком, и к ним можно обращаться так, как если бы вы их создавали в коде сами. При втором проходе страницы наша программа отреагирует на эти пары name=value и направит ход исполнения на другие рельсы. В данном случае мы проверим, есть ли переменная $id, и в зависимости от результата выполним тот или иной код. Вот как это будет выглядеть:

<html>

<body>

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

// display individual record

if ($id)

{

$result = mysql_query("SELECT * FROM employees WHERE id=$id",$db);

$myrow = mysql_fetch_array($result);

printf("First name: %s\n<br>", $myrow["first"]);

printf("Last name: %s\n<br>", $myrow["last"]);

printf("Address: %s\n<br>", $myrow["address"]);

printf("Position: %s\n<br>", $myrow["position"]);

}

else

{

// show employee list

$result = mysql_query("SELECT * FROM employees",$db);

if ($myrow = mysql_fetch_array($result))

{

// display list if there are records to display

do

{

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],

$myrow["first"], $myrow["last"]);

}

while ($myrow = mysql_fetch_array($result));

}

else

{

// no records to display

echo "Sorry, no records were found!";

}

}

?>

</body>

</html>