Функции MySQL (PDO_MYSQL)
Введение
PDO_MYSQL - это драйвер, реализуюший интерфейс PHP Data Objects (PDO) и предоставляет доступ из PHP к базам данных MySQL.
Начиная с PHP 5.2.1, PDO_MYSQL по умолчанию использует эмулированную подготовку. Ранее PDO_MYSQL по умолчанию использовал нативную поддержку подготовленных запросов, пристутствущих в MySQL 4.1 и выше, и эмулировал их для более старых версий клиентских библиотек 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-запроса завершит все открытые транзакции, а также выполнит весь стек не завершенных запросов.
Установка
Обычно, установочные пакеты 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. Начиная с PHP 5.4, по умолчанию
используется библиотека 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.
Версия | Описание |
---|---|
5.4.0 | Библиотека mysqlnd выбирается по умолчанию, если вы собираете PHP с поддержкой PDO_MYSQL. Ранее библиотекой по умолчанию для MySQL была libmysqlclient. |
5.4.0 | Клиентские библиотеки MySQL версии 4.1 и ниже больше не поддерживаются. |
5.3.9 | Добавлена поддержка SSL в mysqlnd с OpenSSL. |
5.3.7 | Добавлена поддержка SSL в libmysqlclient с OpenSSL. |
Предопределенные константы
Перечисленные ниже константы определены данным драйвером и будут доступны только в случае, если PHP был собран с поддержкой этого расширения или данное расширение было подгружено динамически во время выполнения. Вдобавок, эти драйверо-зависимые константы должны быть использованы только совместно с этим драйвером. Использование атрибутов, специфичных для некоторого драйвера с другим драйвером может вызвать неожиданное поведение. Если ваш код выполняется с несколькими драйверами, то можно использовать функцию PDO::getAttribute() для получения атрибута PDO::ATTR_DRIVER_NAME
для проверки драйвера.
-
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
(int) -
Если этот атрибут установлен в
true
в PDOStatement, MySQL-драйвер будет использовать буферизованные версии API MySQL. Если вы пишете переносимый на другие библиотеки код, вы должны использовать PDOStatement::fetchAll().Пример #1 Буферизация запросов в MySQL
<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
$stmt = $db->prepare('select * from foo',
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
} else {
die("приложение работает только с mysql; Следует использовать \$stmt->fetchAll() вместо этого");
}
?> -
PDO::MYSQL_ATTR_LOCAL_INFILE
(int) -
Включить
LOAD LOCAL INFILE
.Обратите внимание, что эта константа может быть использована только в массиве
driver_options
при создании дескриптора новой базы данных. -
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
(string) -
Позволяет ограничить загрузку LOCAL DATA файлами, расположенными в указанном каталоге.
Обратите внимание, что эта константа может использоваться только в массиве
driver_options
при создании нового дескриптора базы данных. -
PDO::MYSQL_ATTR_INIT_COMMAND
(int) -
Команда, которую необходимо выполнить при подключении к 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) -
Включить сжатие сетевого соединения. Эта константа поддерживается при компиляции вместе с mysqlnd, начиная c PHP 5.3.11.
-
PDO::MYSQL_ATTR_SSL_CA
(int) -
Путь к файлу сертификата SSL.
Существует, начиная с PHP 5.3.7.
-
PDO::MYSQL_ATTR_SSL_CAPATH
(int) -
Путь к директории, которая содержит SSL-сертификаты доверенных центров (CA), хранящиеся в формате PEM.
Существует, начиная с PHP 5.3.7.
-
PDO::MYSQL_ATTR_SSL_CERT
(int) -
Путь к файлу с SSL-сертификатом.
Существует, начиная с PHP 5.3.7.
-
PDO::MYSQL_ATTR_SSL_CIPHER
(int) -
Список из одного или более допустимых шифров для использования в SSL-шифровании в формате, который понимает OpenSSL. Например:
DHE-RSA-AES256-SHA:AES128-SHA
Существует, начиная с PHP 5.3.7.
-
PDO::MYSQL_ATTR_SSL_KEY
(int) -
Путь к файлу с ключом SSL.
Существует, начиная с PHP 5.3.7.
-
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 5.5.21 и PHP 5.6.5.
Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
Имя | По умолчанию | Место изменения |
---|---|---|
pdo_mysql.default_socket | "/tmp/mysql.sock" | PHP_INI_SYSTEM |
pdo_mysql.debug | NULL | PHP_INI_SYSTEM |
Краткое разъяснение конфигурационных директив.
-
pdo_mysql.default_socket
string -
Устанавливает сокет домена UNIX. Эту опцию необходимо указать во время компиляции, если сокет домена найден во время конфигурирования. Эта настройка только для Unix.
-
pdo_mysql.debug
bool -
Разрешает отладку для PDO_MYSQL. Эта настройка доступна только, если PDO_MYSQL скомпилирован с "mysqlnd" и в режиме отладки PDO.
Содержание
- PDO_MYSQL DSN — Соединение с базой данных MySQL