| Урок 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. На этом и закончим наш урок. До встречи.  
 
 |