array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'ref.pdo-mysql.php', 1 => 'MySQL (PDO)', ), 'up' => array ( 0 => 'pdo.drivers.php', 1 => 'Драйверы PDO', ), 'prev' => array ( 0 => 'ref.pdo-informix.connection.php', 1 => 'PDO_INFORMIX DSN', ), 'next' => array ( 0 => 'ref.pdo-mysql.connection.php', 1 => 'PDO_MYSQL DSN', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/pdo_mysql/reference.xml', ), 'extra_header_links' => array ( 'rel' => 'alternate', 'href' => '/manual/en/feeds/ref.pdo-mysql.atom', 'type' => 'application/atom+xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
PDO_MYSQL — это драйвер, который реализует интерфейс PHP Data Objects (PDO) и даёт PHP доступ к базам данных MySQL.
Драйвер PDO_MYSQL по умолчанию использует эмулированную подготовку.
MySQL 8
При запуске PHP до версии 7.1.16 или PHP с версии 7.2 до версии 7.2.4 в качестве плагина шифрования паролей по умолчанию для сервера MySQL 8 устанавливают 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).
Вместо него в файле конфигурации сервера my.cnf указывают —
default_authentication_plugin=mysql_native_password
.
Плагин caching_sha2_password
получил полную поддержку начиная с PHP 7.4.4. В предыдущих версиях 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::ATTR_DRIVER_NAME
, вызывают
метод PDO::getAttribute(), если код запускается с несколькими драйверами.
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
(bool)
false
.
Пример #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-сертификата сервера. Эта опция доступна только с драйвером mysqlnd.
Существует начиная с 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.default_socket | "/tmp/mysql.sock" | INI_SYSTEM |
pdo_mysql.debug | NULL | INI_SYSTEM |
Краткое разъяснение конфигурационных директив.
pdo_mysql.default_socket
string
Устанавливает сокет домена UNIX. Эту опцию необходимо указать во время компиляции, если сокет домена найден во время конфигурирования. Эта настройка только для Unix.
pdo_mysql.debug
bool
Разрешает отладку для PDO_MYSQL. Эта настройка доступна только, если PDO_MYSQL скомпилирован с "mysqlnd" и в режиме отладки PDO.