Урок 16. MySQL и PHP.
Человек живет только для того, чтобы учиться... Карлос Кастанеда. Учение
Дона Хуана.
Итак, на прошлом уроке мы познакомились с базой данных MySQL и рассмотрели
использование некоторых ее операторов. Теперь же настало время применить
полученные знания в программировании на PHP, и на сегодняшнем уроке мы
рассмотрим взаимодействие MySQL с этим языком вебпрограммирования.
Соединение с MySQL.
Прежде, чем начать работу с базой данных, необходимо создать соединение с
сервером MySQL. Этим и занимается функция mysql_connect().
Она должна быть вызвана до каких-либо других функций работы с MySQL, в противном
случае они возвратят ошибки.
Аналогом функции mysql_connect является функция
mysql_pconnect. Их отличие состоит в том, что последняя открывает
постоянное соединение с MySQL, благодаря чему снижаются расходы времени и
ресурсов на создание новых соединений. Это постоянное соединение не уничтожается
ни функцией закрытия соединения, ни каким-либо другим образом. Использование
этой функции требуется в случае, если вашему веб-приложению приходится часто
обращаться к MySQL. Но учтите, что mysql_pconnect работает только на
сервере, где PHP установлен как модуль.
Выбор или создание базы данных.
Вторым шагом при работе с MySQL чаще всего становится выбор базы данных для
дальнейшей работы, либо создание новой базы данных.
Создание базы данных осуществляет функция mysql_create_db().
mysql_create_db(имя базы данных, [идентификатор
соединения]); |
Имя базы данных может состоять из любых символов, используемых для задания
имени директорий на сервере, исключая символы '/', '\', '.'.
Идентификатор соединения есть результат выполнения функции
mysql_connect или mysql_pconnect.
Для дальшейшей работы с базой данных вы должны ее выбрать. Выбор базы данных
осуществляется функцией mysql_select_db(). Ее синтаксис выглядит
следующим образом:
mysql_select_db(имя базы данных, [идентификатор
соединения]); |
Запросы в MySQL.
Пожалуй, самая универсальная функция для работы с MySQL - mysql_query().
Она может заменить практически любую функцию работы с базами данных MySQL,
исключая mysql_connect() и mysql_close().
В качестве одного из аргументов ей передается запрос MySQL - наподобие тех,
которыми мы занимались на прошлом занятии.
Например, с помощью нее мы можем создать базу данных, не используя
вышерассмотренную функцию mysql_create_db().
$link = mysql_connect('somehost.ru', 'artem', '123456') or die("Не могу
соединиться"); mysql_query("CREATE database my_db", $link) or die("Ошибка
запроса"); |
Предположим, мы хотим ввести данные в базу данных, созданную на прошлом
уроке.
$link = mysql_connect('somehost.ru', 'artem', '123456') or die("Не могу
соединиться"); mysql_select_db('myphp', $link); $query = "INSERT INTO
lessons (title, body) VALUES ( 'Выражаемся по-ПиЭйчПовски', 'Итак, на
прошлом уроке я обещал начать урок 3 с изучения следующего, четвертого типа
данных...' )"; mysql_query($query, $link); |
А теперь давайте выберем данные, которые ввели на этом и прошлом уроке. Это
делается следующим образом:
// предположим, что уже соединились с MySQL // и выбрали базу данных
'myphp' $query = "SELECT title, body FROM lessons"; $result =
mysql_query($query, $link); while ($row = mysql_fetch_array($result))
{ echo
"<h1>".$row['title']."</h1><p>"; echo
$row['body']."</p>"; } |
Заметьте, что mysql_query возвращает не сам результат, а
идентификатор результата, который может быть использован другими функциями.
Таким образом, $result в примере выше не содержим необходимую нам
информацию в явном виде, его значение - лишь ссылка на нее.
Извлечение информации.
Чтобы извлечь информацию в понятную нам форму, необходимо воспользоваться
функциями mysql_fetch_array(), mysql_fetch_row() или другими
более специфическими функциями.
Функция mysql_fetch_array(), использованная в примере выше,
осуществляет выборку записи в виде ассоциативного массива. Заметьте, эта
функция, как и другие функции извлечения информации, не работает непосредственно
с MySQL, а лишь обрабатывает полученный результат, поэтому ссылка на
идентификатор соединения для работы этой функцией не требуется. Ее обязательный
аргумент - лишь идентификатор результата, полученный функцией
mysql_query().
За каждый раз своего выполения эта функция обрабатывает лишь одну строку
результата, тем самым, чтобы получить данные из всего результата выполнения
mysql_query, необходимо использовать функцию в цикле. Например:
$result = mysql_query("SELECT id, title FROM lessons", $link); $first_row
= mysql_fetch_array($result); echo "Первая
запись:<br>".$first_row['id']." -
".$first_row['title']."<br>"; echo "Остальные
записи:<br>"; while ($row = mysql_fetch_array($result))
{ echo $row['id']." -
".$row['title'].'<br>'; } |
Данный пример может вывести у вас непонятные символы - текст в неизвестной
кодировке. Это связано с тем, что MySQL использует по умолчанию кодировку latin,
тогда как отображение данных происходит на веб-странице с кодировкой, скорее
всего, windows-1251. Тем самым, данные введенные посредством одной кодировки и
показанные - другой, превращаются в абракадабру. Но если вы будете вводить
данные через веб-интерфейс и выводить через него же, то "смешения" кодировок не
произойдет, и текст будет выводиться в нормальном виде.
Функция mysql_fetch_row() аналогична вышерассмотренной функции, за
исключением того, что она возвращает пронумерованный массив, а не
ассоциативный.
В случае, когда идентификатор результата содержит значения небольшого
количества полей, или, что еще лучше, одного, то тогда становится удобным
размещать данные не в массиве, а в отдельных переменных. Этим и занимается
функция mysql_result(). Она имеет несколько более сложный синтаксис,
чем mysql_fetch_array, поэтому рассмотрим его подробнее:
mysql_result(идентификатор результата, номер записи,
[поле]); |
Номер записи - это номер строки, из которой требуется получить данные. Поле -
это название или номер поля указанной записи, из которой необходимо получить
данные.
$result = mysql_query("SELECT title FROM lessons",
$link); $title1 = mysql_result($result, 0); $title2 =
mysql_result($result, 1); |
Так как мы сделали выборку только по одному полю, то третий аргумент функции
mysql_result() необязателен.
Закрытие соединения с MySQL.
При завершении работы скрипта PHP самостоятельно закрывает соединение с
сервером MySQL, так что вы можете не заботиться об этом. Но все же правилом
хорошего тона считается принудительное закрытие соединения после выполнения всех
необходимых операций с базами данных.
Закрытие соединения осуществляется с помощью функции mysql_close().
В заключение.
Конечно, все функции PHP для работы с данными MySQL невозможно охватить в
пределах одного урока. Мы разобрали самые важные и наиболее используемые из них.
Настоятельно рекомендую ознакомиться с другими в документации PHP.
На этом и закончим наш урок. До встречи.
|