Чат PHP-разработчиков
Логические задачи
Новогодние акции
Взаимодействие PHP и MySQL

Взаимодействие PHP и MySQL

После установки и настройки базы данных MySQL можно приступать к написанию сценариев PHP для взаимодействия с базой данных. В настоящей статье приведено описание всех основных функций, позволяющих передавать данные в прямом и обратном направлениях от веб-сайта к базе данных.

Неважно, насколько простые или сложные у вас сценарии, если они общаются с базой данных, они начинаются с одних и тех же нескольких действий:

  1. Подключение к установленной базе данных MySQL.
  2. Использование команды USE в отношении нужной базы данных MySQL.
  3. Отправка SQL базе данных.
  4. Получение результатов.
  5. Обработка результатов.

Действия 3, 4 и 5 будут изменяться в зависимости от характера выполняемой работы. Сценарий, создающий таблицы, немного отличается от сценария, который ведет поиск в существующих таблицах. Но первые два действия — подключение к MySQL и использование нужной базы данных — всегда одни и те же, независимо от предназначения сценария.

Подключение к базе данных MySQL

Сначала нужно сообщить вашему PHP-сценарию, как нужно подключиться к базе данных. Этот процесс, по сути, сообщает PHP, что нужно делать то же самое, что вы выполняли, начиная работу со своим клиентом командной строки MySQL. Чтобы подключиться к базе данных, PHP нужно будет передать следующую информацию: имя хоста вашей базы данных, имя пользователя, пароль и имя базы данных.

Для подключения к базе данных мы будем использовать PDO - PHP Data Objects. При его использовании можно не бояться SQL-инъекций, это возможно благодаря подготовленным параметрам, но об этом чуть позже.

Это важно! Если в интернете вы найдёте урок, где будет использоваться mysqli_connect или mysql_connect - смело закрывайте его, так писали 10 лет назад.

Для создания подключения нужно создать новый объект класса PDO. В качестве аргументов в конструктор нужно передать DSN - это строка с указанием драйвера (в нашем случае - mysql), хоста и именем базы данных. Второй аргумент - имя пользователя (в нашем случае - root). Третий - пароль (в наше случае пустой).

Перед уроком я создал базу users, а в ней табличку data со следующей структурой:

Код доступен только после покупки курса MySQL с нуля.
Код доступен только после покупки курса MySQL с нуля.

Первым делом после подключения стоит задать кодировку:

Код доступен только после покупки курса MySQL с нуля.

После этого мы можем выполнять запросы. Выглядит это так:

Код доступен только после покупки курса MySQL с нуля.

Сначала мы создаём подготовленный запрос - он пока не выполняется. Заметьте, вместо значений мы указали :name и :year - это те параметры, в которые подставятся значения, заданные в следующих двух строках. В конце мы вызываем execute() - собственно, выполнить получившийся запрос.

Давайте выполним этот скрипт и посмотрим на то, что появилось в базе.
Результат первого запроса из PHP

Давайте обновим скрипт ещё несколько раз и посмотрим в базу снова.
Результат других запросов из PHP

Как видим - данные в базе успешно добавились.

Выборка из базы с помощью PHP

Давайте теперь прочитаем данные, которые мы записали. Схема та же, только подготавливаем SELECT-запрос.

Код доступен только после покупки курса MySQL с нуля.

Запрос выполнился, но это ещё не всё. Теперь нужно получить результат. Это делается так:

Код доступен только после покупки курса MySQL с нуля.

В результате мы получим массив этих записей:
Вывод данных из БД

Давайте выведем их более красиво, добавим немножко HTML.

Код доступен только после покупки курса MySQL с нуля.

Ну вот, совершенно другое дело!
Данные из MySQL в тегах HTML

Если в SELECT-запросе нужно добавить какие-то параметры, то делается это аналогично:

Код доступен только после покупки курса MySQL с нуля.

Теперь вернётся только один пользователь, подошедший под условия запроса.
Один пользователь из запроса

Вот и всё. Главное - всегда используйте биндинг параметров. Не пихайте данные напрямую в запрос - это небезопасно. Если интересно, можете почитать про SQL-инъекции.

Читайте также
Комментарии (2)


babka.s.miniganom

все делаю как по инструкции, а запись данных в таблицу все равно не происходит, пробовал разные варианты, такая же история. при этом данные из других таблиц прекрасно выводит.
update!
решил проблему, нужно добавить авто инкримент полю id, чтобы запросы могли добавляться, ибо он ругался, что нет поля.

ivashkevich

Действительно, прошу прощения за ошибку. Спасибо, исправил.