РАЗРАБОТКА ЭЛЕКТРОННОГО ПОРТАЛА Тема 1. Продолжение Работа с БД на сервере MYSQL из PHP-скриптов Цель темы – освоить основные методы доступа к БД из скриптов, написанных на языке PHP 1.Подключение к БД 2.Формирование запроса 3.Исполнение и интерпретация запроса 1 Общие принципы Существует множество библиотек функций доступа Типичные действия для доступа к БД 1. Подсоединение к серверу 2. Выбор базы данных 3. Выполнение сформированного SQL-запроса для данной БД 4. Анализ •Select •Insert полученных результатов •Update 5. Завершение соединения Подсоединение к серверу Функция mysql_connect • открывает соединение с MySQL сервером • возвращает целое число –сервера’, при корректном mysql_connect(‘имя подсоединении к серверу номер ‘имя пользователя',‘пароль') соединения или 0 (false) при ошибке. $db= mysql_connect('localhost','root',''); Пример <? echo "Подсоединяемся к серверу <br>"; // пример соединения с сервером MySQL // для анализа корректности обращения введем В случае неудачного подключения // скалярную переменную $db, Вы можете получить сообщение типа Warning: // в которой будет храниться идентификатор связи $db=mysql_connect('localhost','root',''); MySQL Connection Failed: Unknown MySQL Server Hostсоединения 'localhos' (2) $db <br>\n"; echo "Идентификатор in d:/apache/htdocs/db_test/spisok.php3 on line 6 ?> Устойчивое соединение Обеспечивает функция mysql_pconnect() Соединение с сервером SQL не закроется, когда закончится выполнение сценария. Следует применять в тех приложениях PHP, в которых за короткий промежуток времени производжится много соединений с сервером MySQL с использованием одного и того же пользователя. В этом случае функция mysql_pconnect() устраняет накладные расходы, связанные с созданием и открытием соединения. Следует помнить, что функция mysql_pconnect() работает только в конфигурации PHP как модуля web-сервера. Завершение соединения Применением функции mysql_close() Автоматически при завершении работы скрипта, если было открыто простое соединении с сервером Выбор конкретной базы данных для дальнейшей работы Операция выполняется функцией mysql_select_db() int mysql_select_db(string database_name, int [link_identifier] ); Обязательным параметром является имя базы данных, оно передается как символьная Необязательным параметром являетсястрока. идентификатор соединения link_identifier, который получен в результате корректного выполнения функции mysql_connect(). Анализ ошибок Применение функции mysql_error() обязательно после любой операции с базой данных. Анализ выполнения операции Отправление запроса к БД mysql_query -- Отправляет SQL-запрос серверу MySQL Запрос формируется в виде символьной строки и может содержать стандартный оператор языка SQL. SQL-запрос всегда записывается в двойных кавычках! Результат работы функции зависит от типа запроса • для DML – true или false • для DQL (Select) – ссылку на ассоциативный массив, содержащий виртуальный набор данных Анализ результатов запросов SELECT Просмотр результата запроса осуществляется с использованием одной из функций: mysql_fetch_array($result) mysql_fetch_row($result) mysql_fetch_object($result) Для определения количества строк в полученном результате служит функция mysql_num_rows($result) ВИД РЕЗУЛЬТАТА ЗАПРОСА Результат запроса – это двумерная таблица. Каждая из приведенных функций позволяет получить значения одной строки этой таблицы. Для расшифровки результата мы должны организовать цикл по всем строкам результирующей таблицы 13 СРАВНЕНИЕ ФУНКЦИЙ Функция mysql_fetch_row($result) – работает максимально быстро, потому что она при расшифровке строки использует числовые индексы массива строки $row= mysql_fetch_row($result); Echo $row[0],$row[1],$row[2], $row[3]; 14 Пример ПРИМЕР $sql= “Select * from books”; $result= mysql_query($sql); // количество строк в результате $n= mysql_num_rows($result); For($i=0;$i<$n;$i++) { // переход на текущую строку $row= mysql_fetch_row($result); // вывод значений 4-х столбцов Echo ‘<br>’.$row[0],$row[1],$row[2], $row[3]; } 16 ЦИКЛ WHILE While($row= mysql_fetch_row($result)) { Echo ‘<br>’.$row[0],$row[1],$row[2], $row[3]; } 17 ФУНКЦИЯ MYSQL_FETCH_ARRAY($RESULT) Функция mysql_fetch_array($result) позволяет обращаться по имени столбца при расшифровке строки результата While($row= mysql_fetch_array($result)) { Echo ‘<br>’.$row[‘ISBN’],$row[‘TITL’],$row[‘YEARIZD’], $row[‘PAGES’]; } Имена полей регистрозависимы 18 Результат SELECT Столбцы результата Строки результата Ассоциативный массив Значение1_1 Значение2_1 Значение3_1 Array(array1(),array2(),…) Array1 –Значение2_2 первая строка Значение1_2 Значение3_2 Array2 – вторая строка … Значение1_3 Значение2_3 Значение3_3 Ключами в строках являются имена столбцов таблицы Назначение функций просмотра результатов Оператор $row=mysql_fetch_array($result)) Или $row=mysql_fetch_row($result)) переустанавливает курсор на очередную строку ассоциативного массива MYSQL_FETCH_OBJECT($RESULT) mysql_fetch_object($result) – формирует строку результата как объект. В этом случае к свойствам объекта требуется обращаться с использованием ссылки на свойство: $row->ISBN - значение поля ISBN. While($row=mysql_fetch_object($result)) { Echo '<br>'.$row->ISBN.'-'.$row->TITL.'-'.$row->YEARIZD.''.$row->PAGES; } 22 Запросы DML Содержимое таблицы BOOKS в БД «Библиотека» ISBN Titl Yearizd Pages 0001 Архитектура компьютеров Вычислительные системы и сети Основы теории баз данных 2006 230 2007 300 2007 250 0002 0003 While($row= mysql_fetch_row($result)) While($row= mysql_fetch_array($result)) $sql= “Select * from books”; {{ $result= mysql_query($sql); Echo ‘<br>’.$row[0],$row[1],$row[2], $row[3]; Echo ‘<br>’.$row[‘ISBN’],$row[‘TITL’],$row[‘YEARIZD’], //} количество строк в результате $row[‘PAGES’]; $n= mysql_num_rows($result); } For($i=0;$i<$n;$i++) { // переход на текущую строку $row= mysql_fetch_row($result); // вывод значений 4-х столбцов Echo ‘<br>’.$row[0],$row[1],$row[2], $row[3]; } 24 ЗАВЕРШЕНИЕ ЗАПРОСА SELECT mysql_free_result($result) Освобождает память! 25 ОСОБЕННОСТИ СИНТАКСИСА SELECT Select <список вывода> LIMIT (n,m) From <список таблиц> Where <условия фильтрациисоединения> Параметры LIMIT – - если оба, то n – номер начальной строки m – количество выводимых строк результата 26 Дополнительные функции mysql_list_dbs (<соединение>) перечисляет все базы данных, имеющиеся на сервере MySQL Для прохода по результату с целью получения списка баз нужно использовать функцию mysql_fetch_object() $db_list=mysql_list_dbs($db); while ($row = mysql_fetch_object($db_list)) { echo $row->Database . "<br>\n"; } ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ mysql_list_fields($dbname,$table_name) – возвращает список имен полей таблицы в конкретной БД mysql_num_fields($list_f)– возвращает количество имен полей таблицы в конкретной БД mysql_field_name ()– возвращает имя заданного поля таблицы из списка 28 ОПЕРАТОРЫ DML Оператор INSERT $sql = ”insert into books(ISBN,TITLE,YEAR_IZD) values (‘0004’,‘Базы данных’,2005)”; $sql = ”insert into books values (‘0005’,‘MS SQL Server 2005’,2007,400)”; $sql = ”insert into books values (‘$isbn’,‘$titl’,’$yearizd’,’$pages’)”; 29 РЕЗУЛЬТАТ $r=mysql_query($sql); - логическая переменная – – неудачный вариант 1- положительный результат. 0 30