Основы работы с PDO

PHP Data Objects (PDO) представляет собой универсальный интерфейс для работы с базами данных в PHP.

Если раньше для каждой СУБД было необходимо не только устанавливать соответствующее расширение, но и писать по несколько раз одно и тоже только потому, что в различных расширениях были, как минимум, различные имена классов, то благодаря PDO можно об этом наконец-то забыть. Кроме того, PDO обеспечивает более высокий уровень безопасности web приложений.

Работа с PDO осуществляется исключительно в, так называемом, объектно-ориентированном стиле. Когда необходимый инструментарий для работы с базой данных доступен в качестве свойств и методов экземпляра соответствующего класса.

PDO обладает довольно широким функционалом, но в данной статье мы рассмотрим лишь самое основное.

Создание и уничтожение подключения к базе данных

Создание подключения производится непосредственно при создании экземпляра класса PDO. При этом в качестве параметров конструктора передаётся специальная строка подключения и, если нужно, имя пользователя и пароль.

В качестве примера приведём создание подключения к СУБД MySQL.

Чтобы уничтожить ранее созданное подключение достаточно присвоить ему значение null

Выборка записей

Для выборки записей используется метод query.

В нём прописывается запрос к СУБД, результаты которого можно извлечь тремя способами.

1.Поочерёдно при помощи метода fetch

При таком способе данные считываются по одной записи на каждом этапе цикла. Каждая запись представлена в PHP в виде ассоциативного массива.

2.Сразу при помощи метода fetchAll

В этом случае выбираются сразу все записи соответствующие данному SQL запросу.

Выбранные записи представлены, по сути, в виде массива массивов и при обходе, например, в цикле foreach можно использовать синтаксис аналогичный предыдущему способу.

Так как данная функция сразу возвращает весь набор данных, её не рекомендуется использовать при работе с их большим количеством.

3.Поочерёдно с помощью метода fetchColumn

Особенность этого способа в том, что выбираются значения только одного конкретного столбца. Что с одной стороны очень удобно так как позволяет сократить объем кода, но в то же время указание необходимого столбца возможно только по его номеру в наборе. Это создаёт неудобства и провоцирует ошибки.

Поэтому данный способ лучше всего применять только в случае запросов, которые сами по себе получают из базы данных только один столбец. Такой подход делает его использование максимально эффективным. В этом случае даже не требуется явно указывать номер столбца.

Например, при выводе данных для запроса:

С применением метода fetchColumn задача упрощается до предела.

Параметры запросов в PDO

Прежде чем перейти к описанию добавления и удаления записей необходимо сказать несколько слов об использовании параметров SQL запросов в PDO.

В PDO существует два типа параметров запроса:

  • Позиционные.
    Например:
  • Именованные
    Например:

Для позиционных параметров необходимо соблюдать последовательность их указания. В случае именованных параметров последовательность соблюдать необязательно (их значение задаётся по имени).

Для выполнения параметрических запросов в PDO используется механизм, так называемых, подготовленных выражений. Когда запрос предварительно формируется и лишь потом запускается.

Это используется в том числе для многократного выполнения однотипных запросов и защиты web приложения от угроз безопасности, но сейчас речь не об этом.

Если требуется выполнить параметрический запрос, вначале необходимо его создать с помощью метода prepare.

Затем нужно связать параметры при помощи метода bindValue. Этот метод принимает два параметра. Номер параметра в последовательности и его значение.

Или bindParam:

Между ними есть строгое различие.

  • bindValue – присваивает параметру конкретное значение жёстко фиксированное в коде;
  • bindParam – присваивает параметру значение некоторой переменной.
В обоих случаях нумерация параметров в последовательности начинается с 1.

После создания запроса и связывания параметров его можно выполнить при помощи метода execute.

После этого результаты запроса можно извлечь любым из способов, приведённых ранее.

Существует также альтернативный подход. Когда связывание параметров запроса производится непосредственно при вызове метода execute. Для этого ему в качестве параметра передаётся массив с их значениями.

При таком способе связывания позиционных параметров необходимо быть очень внимательными, так как возможны ошибки в очерёдности.

Для связывания именованных параметров применяются все способы, приведённые выше для позиционных. Есть только два отличия.

При использовании методов bindValue и bindParam вместо номера параметра в последовательности указывается его имя.

Например, так:

Или так:

При использовании связывания при помощи метода execute вместо обычного массива передаётся ассоциативный. При этом соблюдается тот же принцип: имя параметра – его значение.

Добавление записей

Для того чтобы с помощью PDO добавить новую запись необходимо создать и выполнить соответствующий параметрический запрос.

Его создание и выполнение ничем не отличается от параметрических запросов на выборку данных, которые были подробно описаны выше.

Различие только в тексте непосредственно самого SQL запроса.

Удаление записей

Удаление записей производится аналогичным образом.

Перспективы использования

PDO переводит работу с базами данных в PHP на новый гораздо более высокий уровень. Как в плане технологии, так и в отношении безопасности. Поэтому всё больше разработчиков выбирают именно PDO. На сегодняшний день одно из основных направлений, если уже не main stream.

Безусловно, никто не запрещает применять и более ранний инструментарий. Но, подобное чревато не только сохранением старых технологических издержек. Это может привести к тому, что проект рано или поздно станет больше невозможно развивать в соответствии с актуальными требованиями.

Хотя бы по той простой причине, что устаревшие расширения PHP со временем удаляются разработчиками. Как это было, скажем, с расширением mysql, которое было объявлено устаревшим (deprecated) ещё начиная с версии 5.5.0, а в PHP 7 удалено вовсе. Поэтому все, кто заблаговременно не перешёл на PDO или MySQLi, теперь вынуждены либо оперативно переписывать всю логику взаимодействия с базами данных, либо так и оставаться на PHP 5.

Независимо от предпочтений того или иного конкретного разработчика PDO на сегодняшний день уже входит в число основных технологий работы с базами данных в PHP и поэтому знакомство с ней обязательно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *