Функции MySQL (PDO_MYSQL)

Введение

PDO_MYSQL - это драйвер, реализующий интерфейс PHP Data Objects (PDO) и предоставляет доступ из PHP к базам данных MySQL.

PDO_MYSQL по умолчанию использует эмулированную подготовку.

MySQL 8

При запуске PHP до версии 7.1.16 или PHP 7.2 до 7.2.4, установите плагин пароля по умолчанию MySQL 8 Server в mysql_native_password, иначе вы увидите ошибки, похожие на The server requested authentication method unknown to the client [caching_sha2_password], даже когда caching_sha2_password не используется.

Это связано с тем, что MySQL 8 по умолчанию использует caching_sha2_password, и плагин не распознается старыми версиями PHP (mysqlnd). Вместо этого измените это, установив default_authentication_plugin=mysql_native_password в my.cnf. Плагин caching_sha2_password будет поддерживаться в будущей версии PHP. Пока же модуль mysql_xdevapi поддерживает его.

Внимание

Осторожно: Некоторые типы MySQL таблиц (механизмы хранения, движков) не поддерживают транзакции. При написании кода с использованием транзакций применительно к таблицам, которые их не поддерживают, MySQL будет считать, что транзакция была начата успешно. Кроме того, выполнение любого DDL-запроса завершит все открытые транзакции, а также выполнит весь стек не завершённых запросов.

Замечание:

Драйвер MySQL не поддерживает должным образом PDO::PARAM_INPUT_OUTPUT через PDOStatement::bindParam(); хотя параметр можно использовать, он не обновляется (т.е. фактический вывод игнорируется).

Установка

Обычно установочные пакеты Unix имеют в своём составе бинарные пакеты PHP. Несмотря на то, что эти бинарные пакеты обычно собраны с поддержкой модуля MySQL, может понадобиться установка библиотек модулей отдельно. Проверьте свой дистрибутив на наличие нужных библиотек через пакетный менеджер.

К примеру, на Ubuntu установка пакета php5-mysql устанавливает модули ext/mysql, ext/mysqli, и PDO_MYSQL. На CentOS пакет php-mysql также устанавливает эти три модуля.

Также вы всегда можете скомпилировать необходимые модули самостоятельно. Сборка PHP из исходных кодов позволит вам собрать именно те модули MySQL, которые вам нужны, а также выбрать нужную клиентскую библиотеку для каждого модуля.

Используйте --with-pdo-mysql[=DIR] для установки модуля PDO MySQL, где необязательный параметр [=DIR] указывает директорию, где установлена MySQL. По умолчанию используется библиотека mysqlnd. Более детальный разбор по выбору библиотеки можно почитать в разделе "Выбор библиотеки MySQL".

Дополнительный параметр --with-mysql-sock[=DIR] указывает расположение unix-сокета MySQL для всех MySQL модулей, включая PDO_MYSQL. Если параметр не указан, поиск производится в директориях по умолчанию.

Дополнительный параметр --with-zlib-dir[=DIR] используется как префикс пути к libz.

$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock

Поддержка SSL включается, используя соответствующую константу PDO_MySQL, которая эквивалентна вызову » API MySQL-функции mysql_ssl_set() в C. К тому же SSL не может быть включён с помощью PDO::setAttribute, потому что соединение уже существует. Смотрите документацию MySQL о » подключении к MySQL с SSL.

Предопределённые константы

Перечисленные ниже константы определены данным драйвером и будут доступны только в случае, если PHP был собран с поддержкой этого модуля, или данный модуль был динамически загружен во время выполнения. Вдобавок, эти зависимые от драйвера константы должны быть использованы только совместно с этим драйвером. Использование атрибутов, специфичных для некоторого драйвера с другим драйвером может вызвать неожиданное поведение. Если ваш код выполняется с несколькими драйверами, то можно использовать функцию PDO::getAttribute() для получения атрибута PDO::ATTR_DRIVER_NAME для проверки драйвера.

PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (bool)
По умолчанию все запросы выполняются в буферизованном режиме. Если этот атрибут установлен в значение false для объекта PDO, драйвер MySQL будет использовать небуферизованный режим.

Пример #1 Установка небуферизованного режима MySQL

<?php
$pdo
= new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_password');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$unbufferedResult = $pdo->query("SELECT Name FROM City");
foreach (
$unbufferedResult as $row) {
echo
$row['Name'] . PHP_EOL;
}
?>

PDO::MYSQL_ATTR_LOCAL_INFILE (int)

Включить LOAD LOCAL INFILE.

Обратите внимание, что эта константа может быть использована только в массиве driver_options при создании дескриптора новой базы данных.

PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY (string)

Позволяет ограничить загрузку LOCAL DATA файлами, расположенными в указанном каталоге. Доступно, начиная с версии PHP 8.1.0.

Обратите внимание, что эта константа может использоваться только в массиве driver_options при создании нового дескриптора базы данных.

PDO::MYSQL_ATTR_INIT_COMMAND (string)

Команда, которую необходимо выполнить при подключении к MySQL-серверу. Также будет автоматически выполнена при переподключении.

Обратите внимание, что эта константа может быть использована только в массиве driver_options при создании дескриптора новой базы данных.

PDO::MYSQL_ATTR_READ_DEFAULT_FILE (int)

Чтение именованных параметров из файла my.cnf. Эта опция недоступна, если используется mysqlnd, потому что mysqlnd не читает файлы конфигурации MySQL.

PDO::MYSQL_ATTR_READ_DEFAULT_GROUP (int)

Чтение именованной группы параметров из файла my.cnf или из файла, определённого в константе MYSQL_READ_DEFAULT_FILE. Эта опция недоступна, если используется mysqlnd, потому что mysqlnd не читает файлы конфигурации MySQL.

PDO::MYSQL_ATTR_MAX_BUFFER_SIZE (int)

Максимальный размер буфера. По умолчанию равен 1 Мб. Эта константа не поддерживается при компиляции вместе с mysqlnd.

PDO::MYSQL_ATTR_DIRECT_QUERY (int)

Выполнять прямые запросы, не использовать подготовленные конструкции.

PDO::MYSQL_ATTR_FOUND_ROWS (int)

Возвращает количество найденных (совпавших) строк, а не количество изменённых строк.

PDO::MYSQL_ATTR_IGNORE_SPACE (int)

Разрешает пробелы после имён функций. Делает все имена функций зарезервированными словами.

PDO::MYSQL_ATTR_COMPRESS (int)

Включить сжатие сетевого соединения.

PDO::MYSQL_ATTR_SSL_CA (int)

Путь к файлу сертификата SSL.

PDO::MYSQL_ATTR_SSL_CAPATH (int)

Путь к директории, которая содержит SSL-сертификаты доверенных центров (CA), хранящиеся в формате PEM.

PDO::MYSQL_ATTR_SSL_CERT (int)

Путь к файлу с SSL-сертификатом.

PDO::MYSQL_ATTR_SSL_CIPHER (int)

Список из одного или более допустимых шифров для использования в SSL-шифровании в формате, который понимает OpenSSL. Например: DHE-RSA-AES256-SHA:AES128-SHA

PDO::MYSQL_ATTR_SSL_KEY (int)

Путь к файлу с ключом SSL.

PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT (int)

Предоставляет способ отключения проверки SSL-сертификата сервера.

Существует, начиная с PHP 7.0.18 и PHP 7.1.4.

PDO::MYSQL_ATTR_MULTI_STATEMENTS (int)

Если установлено как false, запрещает запуск множественных запросов, как для PDO::prepare(), так и для PDO::query().

Обратите внимание, что эта константа может быть использована только в массиве driver_options при создании нового дескриптора БД.

Настройка во время выполнения

Поведение этих функций зависит от установок в php.ini.

Опции конфигурации PDO_MYSQL
Имя По умолчанию Место изменения
pdo_mysql.default_socket "/tmp/mysql.sock" PHP_INI_SYSTEM
pdo_mysql.debug NULL PHP_INI_SYSTEM
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

pdo_mysql.default_socket string

Устанавливает сокет домена UNIX. Эту опцию необходимо указать во время компиляции, если сокет домена найден во время конфигурирования. Эта настройка только для Unix.

pdo_mysql.debug bool

Разрешает отладку для PDO_MYSQL. Эта настройка доступна только, если PDO_MYSQL скомпилирован с "mysqlnd" и в режиме отладки PDO.

Содержание

  • PDO_MYSQL DSN — Соединение с базой данных MySQL