Лабораторная работа №10. Тема: «Взаимодействие PHP и MySQL»
Цель: 1. Изучить теоретические основы разработки PHP-сценариев с использованием сервера баз данных MySQL 2. Получить практические навыки в области разработки PHP-сценариев для решения пользовательских задач с использованием СУБД MySQL
Ход работы: 1. создать БД согласно варианту задания. заполнить таблицу данными 2. создать HTML-документ с формой, служащей для ввода исходных данных и передачи их PHP-скрипту 3. создать PHP-скрипт для получения из БД информации согласно указанным в задании запросам. 4. Организовать в скрипте вывод результата в Web-браузер пользователя. 5. Предусмотреть операторы диагностики и обработки исключительных ситуаций
Mysql_connect Эта функция устанавливает соединение с сервером server MySQL и возвращает дескриптор соединения с базой данных <?php $dblocation = "localhost"; // Имя сервера $dbuser = "root"; // Имя пользователя $dbpasswd = ""; // Пароль $dbcnx = @mysql_connect ( $dblocation, $dbuser, $dbpasswd ); if (! $dbcnx ) // Если дескриптор равен 0 соединение не установлено { echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" ); exit (); } ?> Переменные $dblocation, $dbuser и $dbpasswd хранят имя сервера, имя пользователя и пароль, и, как правило, прописываются в отдельном файле (к примеру, config.php), который потом вставляется в каждый PHP-файл, в котором имеется код для работы с MySQL: <? $dblocation = "localhost"; $dbname = "forum"; $dbuser = "root"; $dbpasswd = ""; ?> Mysql_close Эта функция разрывает соединение с сервером MySQL, и возвращает true при успешном выполнении операции и false в противном случае. Функция принимает в качестве аргумента дескриптор соединения с базой данных, возвращаемый функцией mysql_connect.
// устанавливаем соединение с базой данных $dbcnx = @mysql_connect ( $dblocation, $dbuser, $dbpasswd ); if (! $dbcnx ) { // Выводим предупреждение echo ( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" ); // Завершаем работу в случае неудачи exit (); } if( mysql_close ( $dbcnx )) // разрываем соединение { echo( "Соединение с базой данных прекращено" ); } else { echo( "Не удалось завершить соединение" ); } Mysql_select_db функция mysql_select_db выбирает базу данных для дальнейшей работы, и все последующие SQL-запросы применяются к выбранной базе данных. Функция принимает в качестве аргументов название выбираемой базы данных database_name и дескриптор соединения resource. Функция возвращает true при успешном выполнении операции и false в противном случае. К примеру: <?php // Код соединения с базой данных if (! @mysql_select_db ( $dbname, $dbcnx )) { echo( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" ); exit (); } ?> Имеет смысл помещать функции для соединения и выбора базы данных в тот же файл (config.php), где объявлены переменные с именами сервера, пользователя и паролем: <?php $dblocation = "localhost"; $dbname = "softtime"; $dbuser = "root"; $dbpasswd = ""; $dbcnx = @mysql_connect ( $dblocation,$dbuser,$dbpasswd ); if (! $dbcnx ) { echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" ); exit (); } if (! @mysql_select_db ( $dbname, $dbcnx )) { echo( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" ); exit (); } ?> Mysql_query Эта функция применяется для отправки серверу SQL-запросов. Функция возвращает дескриптор запроса в случае успеха и false в случае неудачного выполнения запроса. В данном примере показан код, с помощью которого извлекается одна строка из таблицы authors базы данных forum.
<?php include "config.php"; $ath = mysql_query ( "select * from authors;" ); if( $ath ) { $author = mysql_fetch_array ( $ath ); echo "<br>имя = ". $author ['name']."<br>"; echo "пароль = ". $author ['passw']."<br>"; echo "e-mail = ". $author ['email']."<br>"; echo "url = ". $author ['url']."<br>"; echo "ICQ = ". $author ['icq']."<br>"; echo "about = ". $author ['about']."<br>"; echo "photo = ". $author ['photo']."<br>"; echo "time = ". $author ['time']; } else { echo "<p><b>Error: ".mysql_error (). "</b></p>"; exit (); } ?> Результат выполнения показан на следующем рисунке: Mysql_fetch_array Эта функция возвращает значения полей в виде ассоциативного массива, в качестве аргумента принимает дескриптор запроса возвращаемый функцией mysql_query. Вот как с помощью этой функции можно вывести все строки таблицы authors: <?php include "config.php"; $ath = mysql_query ( "select * from authors;" ); if( $ath ) { // Определяем таблицу и заголовок echo "<table border=1>"; echo "<tr><td>имя</td><td>пароль</td><td>e-mail</td><td>url</td></tr>"; // Так как запрос возвращает несколько строк, применяем цикл while( $author = mysql_fetch_array ( $ath )) { echo "<tr><td>". $author ['name']." </td><td>". $author ['passw']."   </td><td>". $author ['email']." </td><td>". $author ['url']." </td></tr>"; } echo "</table>"; } else { echo "<p><b>Error: ".mysql_error (). "</b><p>"; exit (); } ?> Результат показан на следующем рисунке: Mysql_result С помощью этой функции можно получить доступ к отдельному полю записи. Допустим, нам нужно вывести имя автора, который первым найдется в базе данных. Сделать это можно следующим образом: <?php include "config.php"; $ath = mysql_query ( "select name from authors;" ); if( $ath ) { echo mysql_result ( $ath,0,'name' ); } else { echo "<p><b>Error: ".mysql_error (). "</b><p>"; exit (); } ?> Mysql_fetch_object Эта функция возвращает поля записи данных в виде объекта. Ниже приведен пример, в котором с помощью этой функции из таблицы authors выводятся имя, URL и e-mail авторов. <?php include "config.php"; $ath = mysql_query ( "select * from authors;" ); if( $ath ) { while( $row = mysql_fetch_object ( $ath )) { echo "<p>name: ". $row ->name."</p>"; echo "<p>url: ". $row ->url."</p>"; echo "<p>email: ". $row ->email."</p>"; }} else { echo "<p><b>Error: ".mysql_error (). "</b><p>";
exit ();} ?> Результат выполнения показан на следующем рисунке: Mysql_fetch_row В отличие от функции mysql_fetch_object, эта функция возвращает не объект, а массив, в котором содержатся значения полей: <?php include "config.php"; $ath = mysql_query ( "select * from authors;" ); if( $ath ) { while( $row = mysql_fetch_row ( $ath )) { echo "<p>name: ". $row [1]."</p>"; echo "<p>url: ". $row [4]."</p>"; echo "<p>email: ". $row [3]."</p>"; } } else { echo "<p><b>Error: ".mysql_error (). "</b><p>"; exit (); } ?>
Варианты индивидуальных заданий. 1. Базы данных: Автозаправочные станции = {Название АЗС, объем бензина (л), город }. В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · Найти суммарный объем бензина на бензоколонках города, название которого ввел пользователь; · Найти бензоколонки, в названии которых присутствует строка, введенная пользователем; · Найти бензоколонки, в названии которых количество бензина больше введенного пользователем значения. 2. Базы данных: Детские сады = {Название детского сада, количество детей, количество работников, средняя зарплата }. Необходимо реализовать в РНР – сценариях следующие запросы к таблице из этой базе данных: · Найти детские сады, в которых средняя зарплата меньше введенного пользователем значения · Найти детские сады, в названии которых присутствует строка, введенная пользователем; · Найти количество работников и количество детей в детском саду, название которого ввел пользователь.
3. Базы данных: Программные Продукты (ПП) ={Название ПП, стоимость, Назначение фирмы-разработки }. В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · Найти самый дорогой ПП фирмы, название которого ввел пользователь; · Найти все программные продукты фирмы, название которой ввел пользователь; · Найти программные продукты, в названии фирмы-разработчика которых присутствует строка, введенная пользователем. 4. Базы данных: Продуктовые магазины (ПМ) ={Название ПМ, город, Год, Объем продаж (тыс. руб)}.
В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · Найти магазины, у которых объем продаж в 2009 г. превысил указанное пользователем значение; · Найти магазины города, название города которого ввел пользователь; · найти суммарный объем продаж в магазинах, в названии которых присутствует строка, введенная пользователем. 5. Базы данных: Компьютеры = ={Номер компьютера, Объем свободного места на жестких дисках, Номера дисплейного класса}. В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · найти компьютеры, у которых свободное место на жестких дисках превышает введенное пользователем значение · найти дисплейные классы, в которых количество компьютеров больше или равно введенному пользователем числу; · найти компьютеры дисплейного класса, номер которого задал пользователь. 6. Базы данных: Книги = {Название книги, Типография, Количество страниц, Год издания } В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · найти названия книг, напечатанных в том году, который ввел пользователь; · найти типографии, которые выпустили n и более различных книг, где n – это число, введенное пользователем; · найти книги, имеющие количество страниц от А до В, где А и В – введенные пользователем числа.
7. Базы данных: Документы = {Наименование документа, количество страниц, Название кафедры} В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · найти общее количество документов кафедры, название которой ввел пользователь · найти документы, имеющие количество страниц от А до В, введенные пользователем числа. · Найти кафедры, на которых разработаны документы, в названии которых содержится строка, введенная пользователем. 8. Базы данных: Изделия = {Наименование изделия, Количество входящих в него деталей, Общая трудоемкость изготовления изделия (час), Стоимость} В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · Найти изделия, у которых количество деталей больше или равно введенному пользователем числу; · Найти названия и трудоемкость изготовления изделий, стоимость которых меньше введенного пользователем значения; · Найти информацию по изделиям, в названии которых присутствует строка, введенная пользователем. 9. Базы данных: Кабинеты = {Номер кабинета, Номер корпуса, Количество компьютеров, Количество парт} В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:
· Найти кабинет, в котором количество парт и количество компьютеров превышают введенные пользователем значения; · Найти количество компьютеров в корпусе, номер которого ввел пользователь; · Найти корпус, в котором суммарное количество компьютеров не меньше, чем значение, введенное пользователем. 10. Базы данных: Участники конференции ={ФИО, название, доклада, город, Название секции} В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · Найти участников, которые приехали из города, название которого ввел пользователь; · Найти секции с количеством докладчиков большим или равными числу, введенному пользователем; · Найти количество участников секции, для которой пользователь ввел название или его часть. 11. Базы данных: Автомобили ={Модель автомобиля, цена, название завода-изготовителя} В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных: · Найти автомобили, цена которых не превышает введенное пользователем значение; · Найти заводы-изготовители, количество выпускаемых моделей которых не меньше, чем число, введенное пользователем; · Найти информацию по автомобилям, в названии которых присутствует строка, введенная пользователем.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|