Работа с PDO php на примере MySQL

С приходом php 5.1 значительно изменился подход к работе с базой данных. Появилось новое расширение для PHP, предоставляющее разработчику простой и универсальный интерфейс для доступа к различным базам данных — PDO.  Большое количество PHP-разработчиков привыкли использовать для работы с базами данных расширения mysql и mysqli, но появился более удобный способ взаимодействие.  PHP Data Objects. Этот класс, сокращенно именуемый PDO, предоставляет методы для работы с объектами и prepared statement.

Соединения устанавливаются автоматически при создании объекта PDO от его базового класса. Не имеет значения, какой драйвер вы хотите использовать; все что требуется, это имя базового класса. Конструктор класса принимает аргументы для задания источника данных (DSN), а также необязательные имя пользователя и пароль (если есть).

Чтобы установить подключение к базе достаточно создать экземпляр класса PDO и передать данные для подключения.

Подключение к MySQL:

В случае ошибки при подключении будет выброшено исключение PDOException. Исключения можно обрабатывать самому или оставить глобальному обработчику событий. Но я рекомендую обрабатывать исключения самим.



Обработка ошибок подключения:

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

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

После того как мы разобрались с подключением стоит обратить внимание на ещё один важный параметр — массив опций.
Массив опций — очень полезное дополнение.
Его можно передать при инициализации класса PDO.

Подключение с указанием кодировки и массива опций:

Разберём указанные опции более подробно.

PDO::ERRMODE_EXCEPTION

В большинстве ситуаций этот тип контроля выполнения скрипта предпочтителен. Он выбрасывает исключение, что позволяет вам ловко обрабатывать ошибки и скрывать щепетильную информацию. Как, например, тут:

Код с ошибкой:

В SQL-выражении есть синтаксическая ошибка, которая вызовет исключение. Мы можем записать детали ошибки в лог-файл и человеческим языком намекнуть пользователю, что что-то случилось.

PDO::FETCH_ASSOC позволяет получать массив с названиями столбцов в виде ключей.

Более подробно ознакомится с ключами для массива опций можно в статье на хабрахабре

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

Подключение к базе данных MySQL с помощью PDO PHP

Следующем этапом является получение и отправка данных.

Для начала разберёмся с методами fetch и fetchALL класса PDOStatement.

PDOStatement::fetchИзвлечение следующей строки из результирующего набора.

PDOStatement::fetchAllВозвращает массив, содержащий все строки результирующего набора.

fetch имеет смысл применять, когда требуется поэтапное получение данных или мы точно уверены, что запрос должен вернуть 1 строку. (Например, делаем выборку по уникальному идентификатору id)

fetchAll следует использовать, когда у нас результирующий набор состоит из множества строк. (Например, делаем общий SELECT)

Для работы с базой данных существует несколько способов:

  1. Для выполнение запроса не требует переменных («SELECT * FROM …»)
  2. Для выполнения запросы нужны переменные («SELECT * FROM dbname WHERE id = ?»)

1:

 

2:

Передать нужные запросы мы можем с помощью 2 способов. Первый — это «биндить» параметры и второй — передавать массив с параметрами.

Bind параметров:

Передача массива:

Для себя я написал одну функцию, которая упрощает операцию выполнения запроса:

1 аргумент функции  $sql — это ваш запрос.

2 аргумент $paramarray — массив с аргументами, может быть пустым.

3 аргумент — созданный нами DataBase handler

4 аргумент задаёт использование fetch, либо fetchAll

5 аргумент не обязателен и нужен для информативного отображения ошибки.

На данном этапе мы рассмотрели основные принципы работы с базой данных MySQL с помощью PDO PHP, если остались вопросы, буду рад ответить в комментариях.

2 Комментарии “Работа с PDO php на примере MySQL

  1. Почему нельзя использовать массив в dsn?

    $database = array(
    ‘host’ => ‘localhost’, // имя хоста
    ‘user’ => ‘root’, // имя пользователя БД
    ‘password’ => », // пароль пользователя БД
    ‘name’ => », // имя БД
    ‘port’ => ‘3306’, // порт MySQL по умолчанию
    ‘charset’ => ‘utf8’ // кодировка MySQL
    );

    $dsn = «mysql:host=$database[‘host’]; port=$database[‘port’]; charset=$database[‘charset’]»;

    1. Здравствуйте Сергей, в стандарте(http://php.net/manual/ru/pdo.construct.php) указанно, что аргумент DSN имеет тип string. В переданной строке хранится имя источника данных или DSN, содержащее информацию, необходимую для подключения к базе данных.

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

Ваш e-mail не будет опубликован.