Связь PHP с базой данных MySQL

При создании динамичных Web-страниц часто необходимо помнить о хранилище данных, для которого можно использовать как обычные текстовые файлы, так и базы данных. Для простых приложений при относительно небольшом объеме данных и интенсивности многопользовательского режима подойдут текстовые файлы, однако, если проект предполагает использование нескольких таблиц, содержащих тысячи и более записей, интенсивный многопользовательский режим, защиту данных, а так же выборку нужных данных по различным критериям, то здесь следует воспользоваться базами данных. С денвером у нас идет сервер баз данных MySQL, а не Oracle, его и будем юзать.

В этом посте постараюсь показать, как создать простейшую базу данных в phpMyAdmin, выполнить к ней подключение при помощи PHP и считать из нее какие-то данные. В базе данных у нас будет одна таблица, в которой будет храниться список сотрудников.

В использовании phpMyAdmin сложного ничего нет. При запущенном денвере его можно найти здесь: http://localhost/Tools/phpMyAdmin/index.php. Создавать базы данных при помощи SQL-запроса пока не будем, а воспользуемся графическим интерфейсом:

При создании таблицы все так же просто:

Мы создали таблицу «sotrudniki» в которой у нас 5 полей, теперь создадим сами поля:

Здесь мы создали 5 полей:

id
lastname
firstname
otchestvo
phone

Каждому из них присвоили определенный тип и ограничили длину значения. Кроме того установили первичный ключ и включили авто инкремент поля “id”:

Теперь подробней о типах. В MySQL определены три базовых типа данных: числовой, дата и время и строчный. Каждая из этих категорий подразделяется на множество типов. Основные из них:

Тип	Описание
INT	Целое число
TINYINT	Маленькое целое число (-127 до 128 или от 0 до 255)
FLOAT	Вещественное число с плавающей точкой
DATE	Дата. Отображается в виде ГГГГ-ММ-ДД
TIME	Время. Отображается в виде ЧЧ:ММ:СС
DATETIME	Дата и время. Отображается в виде ГГГГ-ММ-ДДЧЧ:ММ:СС
YEAR[(2|4)]	Год. Можно определить двух- или четырехциферный формат
CHAR(M)	Строка фиксированной длины М (M<=255)
VARCHAR(M)	Строка произвольной длины до М (M<=255)
TEXT	Длинные текстовые фрагменты (<=65535)
BLOB	Большие двоичные объекты (изображения, звуки)

Для нашего идентификатора мы использовали INT, ну с ним все понятно, а для остальных полей – VARCHAR, т.к. текста у нас много в них не будет (я не знаю очень длинных фамилий). Авто инкремент используем для удобства, что бы при добавлении в таблицу каждой новой записи, ее идентификатор присваивался автоматически.

Начинаем заполнять таблицу записями:

Тут тоже все просто, только следует помнить, что поле “id” мы пропускаем, оно заполнится само.

Ну так хватит уже заполнять, перейдем к PHP =).

Для получения доступа к базе данных, необходимо сделать следующие шаги:

Подключение к серверу MySQL.
Выбор базы данных.
Выполнение запроса к базе данных:
добавление;
удаление;
изменение;
поиск;
сортировка.
Получение результата запроса.
Отсоединение от базы данных.
Теперь пример:

<?php
$db = mysql_connect("localhost","php","12345") or die('Connection failed!'); //!!
mysql_select_db("test",$db);
$result = mysql_query("SELECT * FROM sotrudniki",$db);
$row = mysql_fetch_array($result);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сотрудники</title>
</head>

<body>
<p> Таблица сотрудников: </p>

<table border='solid'>
<tr>
<td> №
</td>
<td> Фамилия
</td>
<td> Имя
</td>
<td> Отчество
</td>
<td> Телефон
</td>
</tr>
<?php
do
{
printf(" <tr>
<td> %s
</td>
<td> %s
</td>
<td> %s
</td>
<td> %s
</td>
<td> %s
</td>
</tr> ", $row["id"],$row["lastname"],$row["firstname"],$row["otchestvo"],$row["phone"]);
}
while($row = mysql_fetch_array($result));
mysql_close();
?>

</table>
</body>
</html>

Здесь для подключения к серверу базы данных используется функция mysql_connect(). Ее аргументы: имя хоста, имя пользователя и пароль. Функция возвращает указатель на соединение с MySQL в случае успешного выполнения, или FALSE при неудаче. По завершении работы скрипта соединение закрывается при помощи функции mysql_close().

После установки соединения с сервером, необходимо выбрать базу данных. Для этого используем функцию mysql_select_db(). Ее аргументы: имя базы данных, указатель на соединение с сервером. Указатель можно опустить, тогда будет использовано последнее открытое соединение.

Для посылки запроса выбранной базе данных используем функцию mysql_query(). Ее аргументами являются: строка с запросом, указатель на соединение с сервером, последний так же можно опустить. Запросы конструируются для добавления, удаления, изменения и выбора данных. В данном случае запрос “SELECT * FROM sotrudniki” выбирает все данные из таблицы “sotrudniki”. В переменную $result возвращается результат выполнения запроса.

Далее результат выполнения запроса обрабатывается функцией mysql_fetch_array(), которая возвращает ассоциативный массив, числовой массив или и тот, и другой. Функция возвращает значения в массиве с индексами по названию колонок. В отличии от него функция mysql_fetch_row() получает результирующий ряд как перечислимый массив, а функция mysql_fetch_assoc() извлекает ряд результата только как ассоциативный массив. Для переходя к следующей записи, функция mysql_fetch_array() вызывается снова.

Функция mysql_fetch_array() может иметь необязательные параметры:

MYSQL_ASSOC – только ассоциативные индексы;
MYSQL_NUM – только числовые индексы;
MYSQL_BOTH – и те, и другие.
Дальше у нас идет обычный HTML-код, который я комментировать не буду. Мы создаем шапку будущей таблицы и начинаем скрипт PHP, в котором в цикле do..while выводим записи из базы данных, постоянно дорисовывая таблицу, пока наши записи не закончатся.

В printf`е на место каждого спецификатора “%s” вставляется последующая переменная, которая идет после строки.

С “$row[«id»]” думаю тоже все понятно, здесь “id” – имя столбца нашей таблицы. Запись идентична “$row[1]” в данном случае, т.к. у нас включены как ассоциативные, так и числовые индексы.

Наш цикл будет работать до тех пор, пока не закончатся записи в таблице. Когда они закончатся, “$row = mysql_fetch_array($result)” вернет FALSE.

После того как наш цикл окончил свою работу, закрываем соединение с сервером MySQL.

После скрипта PHP не забудем поставить закрывающийся тег </table>, ведь у таблицы должен быть конец =).