Функции РНР для работы с базами данных MySQL Лекция Дисциплина МИРОВЫЕ ИНФОРМАЦИОННЫЕ РЕСУРСЫ Преподаватель ПРОКОФЬЕВА СВЕТЛАНА ВЛАДИСЛАВОВНА Башкирский государственный аграрный университет, 2011 г.
Рекомендуемая литература Пейтон, К., Меллер, А. РНР & MySQL. М: ООО «Бином-пресс», Кузнецов, М., Симдянов, И. РНР. Народные советы. СПб: БХВ-Петербург, С Шапошников, И. РНР 5.1. Учебный курс. СПб: Питер, – С Шкрыль, А. РНР – это просто. Программируем для Web-сайта. СПб.: БХВ-Петербург, С
1. Взаимодействие серверного сценария РНР и СУБД MySQL 2. Cоединение с MySQL и базой данных 3. Выполнение запросов 4. Обработка результатов запросов
1. Взаимодействие сценария РНР с СУБД MySQL 2. Cоединение с MySQL и базой данных 3. Выполнение запросов 4. Обработка результатов запросов
Клиент Сервер Web- браузер Apache PHP файл PHP MySQL Взаимодействие сценария РНР и серверной СУБД MySQL
Соединение с MySQL Выполнение запросов к базе данных: добавление удаление изменение поиск Закрытие соединения с MySQL Выбор базы данных Подключение базы данных к внешнему Web-интерфейсу
1. Взаимодействие сценария РНР с СУБД MySQL 2. Cоединение с MySQL и базой данных 3. Выполнение запросов 4. Обработка результатов запросов
Соединение с MySQL mysql_connect ([ сервер [, имя_пользователя [, пароль [, новое _ соединение ]]]])
В случае успеха функция возвращает указатель соединения с сервером MySQL, при неудаче возвращает значение false.
Параметры: сервер - сетевой адрес сервера MySQL (на локальном компьютере localhost или IP-адрес ) имя_пользователя - имя пользователя базы данных (root) пароль - пароль пользователя (" ") новое_соединение – если значение true, будет открыто новое соединение с сервером
… $host="localhost"; $user="root"; $pass=""; host,$user,$pass); if (!$link) { exit(" В настоящий момент сервер БД недоступен, поэтому корректное отображение страницы невозможно "); } …
mysql_query("SET NAMES 'cp1251' "); Установка кодировки
Закрытие соединения с СУБД MySQL mysql_close ([MySQL- соединение])
Создание базы данных
Выбор текущей базы данных mysql_select_db (имя_БД [, MySQL-соединение]) При успешном выполнении – true, в противном случае - false
… $db_name="tables"; if { exit(" В настоящий момент база данных недоступна, поэтому корректное отображение страницы невозможно. "); } mysql_query("SET NAMES 'cp1251' "); …
1. Взаимодействие интерпретатора РНР и СУБД MySQL 2. Cоединение с MySQL и базой данных 3. Выполнение запросов 4. Обработка результатов запросов
Выполнение запросов mysql_query (запрос [, MySQL- соединение] ) Функция возвращает указатель результирующей таблицы в случае успеха и false в случае неудачного выполнения запроса.
Таблица items id writer name 1Кирсанов, Д.Цвет в веб-дизайне 2Семенов И. П оиск конкретики в Интернете 3Олифер, Н.Сетевые операционные системы 4Андреев, А. Р ын ок интернет-ссылок в Рунете
… $rezult = mysql_query (" CREATE TABLE items (id smallint UNSIGNED AUTO_INCREMENT, writer varchar(40) NOT NULL, name varchar(80) NOT NULL, PRIMARY KEY (id)) "); …
$rezult = mysql_query (' INSERT INTO items (name, writer ) VALUES ("Цвет в веб-дизайне", "Кирсанов, Д."); ' ); …
Пример 1 Ввод данных в таблицу через форму
Файл forma.htm Таблица "Статьи" Ввод новой записи Автор статьи: Название статьи:
Файл vvod.php <?php $writer = $_GET['writer']; $name= $_GET['name']; $link=mysql_connect("localhost","root",""); $result=mysql_select_db ("tables"); $sql="INSERT INTO items (writer, name) values(' ".$writer." ',' ".$name." ')"; mysql_query($sql); mysql_close(); ?> "INSERT INTO items (writer, name) values ('Семенов И.',' Поиск конкретики в Интернете')";
1. Взаимодействие сценария РНР с СУБД MySQL 2. Cоединение с MySQL и базой данных 3. Выполнение запросов 4. Обработка результатов запросов
Функция mysql_num_rows ( результат ) Эта функция работает только с запросами SELECT. Количество записей в результате запроса
… $q = mysql_query("SELECT * FROM items "); echo "Число записей в таблице items: ".mysql_num_rows($q); …
Чтобы получить количество рядов, обработанных функциями INSERT, UPDATE, DELETE, следует использовать функцию mysql_affected_rows ( результат)
Количество полей в результате запроса mysql_num_fields( результат ) Нап ример: … $q = mysql_query("SELECT * FROM items"); echo "В таблице items ".mysql_num_fields($q)." полей "; …
ПЯТЬ функций для обработки набора записей 1. mysql_result() 2. mysql_fetch_row() 3. mysql_fetch_assoc() 4. mysql_fetch_array() 5. mysql_fetch_object()
Значение каждого поля можно узнать с помощью функции mysql_result ( результат, номер_записи, [поле] ); 1. mysql_result ( )
Предположим, SQL-запрос вернул следующий набор данных: writern ame Кирсанов, Д. Цвет в веб-дизайне Семенов, И. П оиск конкретики в Интернете
… $q = mysql_query("SELECT * FROM items"); $rows = mysql_num_rows($q); $fields = mysql_num_fields($q); for ($nr=0; $nr<$rows; $nr++) { for ($nf=0; $nf<$fields; $nf++) { echo mysql_result($q, $nr, $nf)." "; } echo " "; } …
Функция mysql_fetch_row ( результат ) получает сразу всю строку, соответствующую текущей записи результата. 2. mysql_fetch_row ( )
… $q = mysql_query("SELECT * FROM items"); $rows = mysql_num_rows($q); for ($nr=0; $nr<$rows; $nr++) { $f = mysql_fetch_row($q); echo var_dump($f); echo " "; } …
Функция mysql_fetch_assoc( результат ); возвращает ассоциативный массив. 3. mysql_fetch_assoc ( )
Функция mysql_fetch_array ( результат [, тип_результата ] ) возвращает массив. 4. mysql_fetch_array ( )
Значения параметра тип_результата : MYSQL_ASSOC - возвращает ассоциативный массив; MYSQL_NUM - возвращает массив с числовыми индексами; MYSQL_BOTH (по умолчанию) - возвращает массив с двойными индексами, т. е. с ним можно работать, как с ассоциативным массивом и как со списком.
Пример 2 Система поиска информации в БД
Таблица items Таблица categories id writer namecatid 1Кирсанов, Д.Цвет в веб-дизайне 1 2Семенов И. П оиск конкретики в Интернете 1 3Олифер, Н.Сетевые операционные системы 5 4Андреев, А. Р ын ок интернет-ссылок в Рунете 1 namecatid Интернет 1 Система 5 Офис 2 Программирование 3
… $q=mysql_query("SELECT name FROM categories"); $rows=mysql_num_rows($q); echo "Выбери категорию для поиска: "; echo" "; for($nr=0; $nr<$rows; $nr++) { $f=mysql_fetch_assoc($q); echo" ".$f['name']." "; } echo" "." "; echo" "; …
… $spisok=$_GET['list']; $query="SELECT DISTINCT items.writer, items.name FROM items, categories where categories.catid=items.catid and categories.name=".'"'.$spisok.'"'; $q=mysql_query($query); $rows=mysql_num_rows($q); echo "В категории ".$spisok." найдено статей: ".$rows." "; Фрагмент файла poisk.php
echo" "; echo" Автор Название "; for($nr=0;$nr<$rows;$nr++) { echo" "; $f=mysql_fetch_array($q); echo" ".$f[writer]." ".$f[name]." "; echo" "; } … Продолжение фрагмента файла poisk.php
Функция mysql_fetch_object (результат) возвращает текущую запись в виде объекта, имена членов которого совпадают с именами полей в результирующей таблице. 5. mysql_fetch_object ( )
Функция mysql_field_name ( результат, номер ) возвращает имя поля, находящегося в результате под заданным номером (нумерация начинается с 0).
Функция mysql_field_type( результат, номер ) возвращает тип поля с указанным номером.
Функция mysql_field_flags ( результат, номер ) возвращает свойства, которые имеются у поля с указанным номером.
PHP поддерживает взаимодействие с большим количеством различных СУБД. Традиционно PHP используют совместно с MySQL. В PHP4 поддержка MySQL даже обеспечена по умолчанию. Однако, не стоит забывать и про другие СУБД, которые могут быть полезны при решении определенных задач, если функциональные возможности и производительность MySQL недостаточны. В заключение: РНР и другие СУБД
Примеры СУБД, которые поддерживаются разработчиками PHP MySQL, MySQLi, SQLite, PostgreSQL,Oracle, Microsoft SQL Server, Sybase и др.
Итого Связка PHP+MySQL часто используется при создании небольших и средних сайтов. В языке РНР существуют функции для работы с MySQL. Таким образом можно создавать приложения для взаимодействия пользователя с информационными ресурсами, в том числе через глобальную сеть Интернет.
Ваши вопросы ?