Версия для печати

Урок 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.

На этом и закончим наш урок. До встречи.


Назад, на урок 15

Назад

Hosted by uCoz