Lec_s2_07_mysql_00.ppt
- Количество слайдов: 33
Интернет технологии в системах и сетях My. SQL и PHP
Работа с My. SQL
Структура базы данных Сначала давайте рассмотрим структуру баз данных. Схематично она выглядит следующим образом: l база данных 1 l l l база данных 2 l l l таблица 2. 1. . . база данных n l l таблица 1. 1 таблица 1. 2. . . таблица 1. n таблица n. 1 Таким образом, данные содержатся в таблицах, которые в свою очередь объединены в группу базы данных. Тем самым, чтобы начать работу с My. SQL нам требуется прежде всего создать базу данных, с которой мы будем взаимодействовать.
Команда: CREATE l l l Итак, в консоли пишем запрос: CREATE database myphp; Мы говорим My. SQL создать базу данных с именем "myphp", причем регистр ключевых слов несущественен, но порядок слов в запросе не может быть изменен. Теперь выберем только что созданную базу для работы с ней: USE myphp;
Визуальный интерфейс создания БД
Создание таблицы l l l l Теперь нам необходимо создать таблицу, с которой мы будем работать. Пусть это будет таблица "lessons". CREATE table lessons ( id int auto_increment primary key, title varchar(250), body mediumtext, pub_datetime, enable enum('0', '1') default '1' );
Создание таблицы l Мы создали таблицу lessons с 5 полями: l l l id урока, представяющий собой уникальное число большее нуля, которое будет генерироваться автоматически при добавлении новой записи в таблицу путем увеличения максимального id на единицу (auto_increment); title - название урока длиной до 250 символов; body - собственно, сам урок, представляющий собой текст; pub_date - дата и время публикации урока; enable - флаг, который указывает, доступен ли урок посетителям, поле может иметь только два значения: '0' и '1', причем по умолчанию установлено '1'.
Визуальный интерфейс создания таблиц
Команда INSERT Для добавления в таблицу новой записи используется следующая команда: l INSERT INTO lessons VALUES ( "", "Начало", "Прежде всего нужно сказать: PHPскрипт для его выполнения должен быть заключен в следующие последовательности символов. . . ", 'now()', "1" ); l
Команда INSERT l l В таблице lessons появилась новая запись, значения которой для каждого поля указываются в скобках после слова values (. . . ). Отметим, что мы пропустили ("") поле, которое заполняется автоматически - это поле id. Обратите внимание, на My. SQL-функцию now(), которая возвращает текущее значение времени. Но чтобы не писать пустых строк, также можно указать My. SQL, в какие именно поля таблицы мы хотим сохранить данные: INSERT into lessons (title, body) values ("Формы всего сущего", "На прошлом уроке мы научились передавать данные в php скрипт. . . ");
Визуальный интерфейс добавления записей в таблицу
Команда SELECT Для проверки содержимого таблицы используем команду SELECT, которая выводит указанные данные на экран. SELECT * from lessons; l Значок "*" указывает, что мы хотим увидеть все поля таблицы lessons. Но также можно производить и выборочный вывод: SELECT title, pub_date from lessons; l
Визуальный интерфейс просмотра записей таблицы
Выбор по условию и сортировка l l Есть возможность выбирать не все записи в таблице, а удовлетворяющие определенным условиям: SELECT title FROM lessons WHERE id = '1'; Тем самым мы выберем название только первого урока. Также мы можем отсортировать данные перед выводом, используя команду ORDER. SELECT id, title FROM lessons ORDER BY title; Сортировка в обратном порядке производиться путем указания директивы DESC.
Ограничений числа записей в результате запроса My. SQL позволяет ограничить количество записей для вывода. Для примера выведем id и название последнего добавленного урока, подразумевая, что мы не знаем, какой id он имеет: l SELECT id, title FROM lessons ORDER BY id DESC LIMIT 1; l
Формирование сложных запросов l Сначала мы отсортировали все записи по id в обратном порядке, так что запись с максимальным id оказалась первой, и вывели только одну эту запись. Должна возвратиться таблица с id, равным 2, и title "Формы всего сущего".
Формирование сложных запросов l My. SQL также предоставляет функции COUNT(поле) для подсчета элементов, занесенных в указанное поле, MAX(поле) и MIN(поле) для определения максимального и минимального элемента соответственно, а также SUM(поле) для подсчета суммы элементов поля. К примеру: SELECT COUNT(*), MAX(pub_date), SUM(id) FROM lessons;
Команда UPDATE l Предположим, что по какой-либо причине мы хотим на время скрыть урок 2 от посетителей. Для этого изменим поле enable, установив его равным нулю. UPDATE lessons SET enable = '0' WHERE id = 2; l Таким образом можно изменить любое поле таблицы.
Команда ALTER TABLE позволяет изменить уже созданную таблицу. Например, в нашей таблице lessons после поля body вставим поле author. ALTER TABLE lessons ADD author VARCHAR(200) DEFAULT ‘Евгений Артамонов' AFTER body; l А теперь удалим эту колонку: ALTER TABLE lessons DROP author; l Тем самым мы свободно можем манипулировать как создаваемыми объектами, так и уже давно созданными. l
Команда ALTER
Этапы работы РНР с My. SQL
Соединение с My. SQL l l Прежде, чем начать работу с базой данных, необходимо создать соединение с сервером My. SQL. За это отвечает функция mysql_connect(), которая должна быть вызвана до каких-либо других функций работы с My. SQL, в противном случае они возвратят ошибки. Аналогом функции mysql_connect является функция mysql_pconnect. Их отличие состоит в том, что последняя открывает постоянное соединение с My. SQL, благодаря чему снижаются расходы времени и ресурсов на создание новых соединений. Это постоянное соединение не уничтожается ни функцией закрытия соединения, ни каким-либо другим образом. Использование этой функции требуется в случае, если вашему веб-приложению приходится часто обращаться к My. SQL (!mysql_pconnect работает только на сервере, где PHP установлен как модуль!).
Выбор или создание базы данных l l l Вторым шагом при работе с My. SQL чаще всего становится выбор базы данных для дальнейшей работы, либо создание новой базы данных. Создание базы данных осуществляет функция mysql_create_db(). mysql_create_db(имя базы данных, [идентификатор соединения]); Имя базы данных может состоять из любых символов, используемых для задания имени директорий на сервере, исключая символы '/', '', '. '.
Выбор или создание базы данных Идентификатор соединения есть результат выполнения функции mysql_connect или mysql_pconnect. l Для дальшейшей работы с базой данных вы должны ее выбрать. Выбор базы данных осуществляется функцией mysql_select_db(). Ее синтаксис выглядит следующим образом: mysql_select_db(имя базы данных, [идентификатор соединения]); l
Запросы в My. SQL Универсальная функция для работы с My. SQL - mysql_query(). Она может заменить практически любую функцию работы с базами данных My. SQL, исключая mysql_connect() и mysql_close(). l В качестве одного из аргументов ей передается запрос My. SQL - наподобие тех, которыми мы занимались на прошлом занятии. l
Создание БД с помощью mysql_query() Например, с помощью нее мы можем создать базу данных, не используя вышерассмотренную функцию mysql_create_db(). $link = mysql_connect('localhost', 'root', '1') or die("Не могу соединиться"); mysql_query("CREATE database my_db", $link) or die("Ошибка запроса"); l
Добавление записей в таблицу $link = mysql_connect('localhost', 'root', '1') or die("Не могу соединиться"); l mysql_select_db('myphp', $link); l $query = "INSERT INTO lessons (title, body) VALUES (‘Новая тема 3', 'Итак, на прошлом уроке я обещал начать урок с изучения. . . ')"; l mysql_query($query, $link); l
Проблема с кодировкой l l Проблема возникает, если вы работаете с кодировкой, отличной от UTF-8, и храните в базе данных тексты, к примеру, в кодировке cp 1251. Но My. Sql не всегда использует по умолчанию кодировку cp 1251, в частности, не всегда по умолчанию используется эта кодировка для соединений с базой. Из-за этого возникают ситуации, когда в базе тексты хранятся в нормальном читабельном виде, но при выводе этих данных на сайт появляются одни лишь знаки вопросов вместо букв – “? ? ? ? ”. Для борьбы с этим явлением нужно использовать следующий ряд запросов, которые должны выполняться после каждого коннекта к базе: mysql_query("SET NAMES 'cp 1251'"); mysql_query("SET CHARACTER SET 'cp 1251'");
Проблема с кодировкой l Команду SET NAMES можно использовать с уточнением сессии: $link = mysql_connect('localhost', 'root', '1') or die("Не могу соединиться"); mysql_query("set names 'cp 1251'", $link);
Извлечение данных из таблицы l l l Чтобы извлечь информацию в понятную нам форму, необходимо воспользоваться функциями mysql_fetch_array(), mysql_fetch_row() или другими более специфическими функциями. Функция mysql_fetch_array() осуществляет выборку записи в виде ассоциативного массива. Эта функция, как и другие функции извлечения информации, не работает непосредственно с My. SQL, а лишь обрабатывает полученный результат, поэтому ссылка на идентификатор соединения для работы этой функцией не требуется. Ее обязательный аргумент - лишь идентификатор результата, полученный функцией mysql_query(). За каждый раз своего выполения эта функция обрабатывает лишь одну строку результата, тем самым, чтобы получить данные из всего результата выполнения mysql_query, необходимо использовать функцию в цикле.
Извлечение данных из таблицы предположим, что уже соединились с My. SQL и выбрали базу данных 'myphp‘: $query = "SELECT title, body FROM lessons"; $result = mysql_query($query, $link); while ($row = mysql_fetch_array($result)) { echo "
"; echo $row['body']. "
"; } l где $link — указатель на сессию My. SQL (My. SQL link identifier). lРезультат выполнения запроса
Спасибо за внимание! Удачи! Найти лектора можно в аудитории 5 -214 (НАУ) Контакты по e-mail: eart@ukr. net или через сайт: vkontakte. ru Материалы лекций и лабораторных на сайте: eart. ho. ua (раздел Преподаватель ->подроздел Материалы для скачивания)