RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 4. Функции MySQL (PDO_MYSQL)

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

Как в PHP 5.2.1, PDO_MYSQL использует эмуляцию подготовки по умолчанию. Раньше PDO_MYSQL по умолчанию применял поддержку запросов, существующую в MySQL 4.1 и выше, и эмуляровал ее для более старых версий библиотек клиента.

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). Вместо этого измените его, установив default_authentication_plugin=mysql_native_password в my.cnf. Плагин caching_sha2_password будет поддержан в будущем выпуске PHP. Тем временем расширение mysql_xdevapi действительно поддерживает его.

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

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

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

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

При сборке используйте --with-pdo-mysql[=DIR], чтобы устанавливать расширение PDO MySQL, где дополнительное значение [=DIR] это библиотека MySQL. С PHP 5.4 mysqlnd это библиотека по умолчанию. Для получения дополнительной информации о выборе библиотеки посмотрите здесь.

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

Произвольно --with-zlib-dir[=DIR] используется, чтобы установить путь к libz.

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

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

Таблица 4.1. Changelog

Версия Описание
5.4.0 mysqlnd стал библиотекой MySQL по умолчанию, собирая PDO_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 (integer)

Если этот признак установлен в TRUE в PDOStatement, драйвер MySQL будет использовать буферизированные версии MySQL API. Если вы пишете портабельный код, необходимо использовать вместо этого функцию PDOStatement::fetchAll.

Пример 4.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("my application only works with mysql; I should use \$stmt->fetchAll() instead");
}
?>
PDO::MYSQL_ATTR_LOCAL_INFILE (integer)

Включает LOAD LOCAL INFILE.

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

PDO::MYSQL_ATTR_INIT_COMMAND (integer)

Команда, чтобы выполнить, соединяясь с сервером MySQL. Будет автоматически повторно выполнена, снова соединяясь.

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

PDO::MYSQL_ATTR_READ_DEFAULT_FILE (integer)

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

PDO::MYSQL_ATTR_READ_DEFAULT_GROUP (integer)

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

PDO::MYSQL_ATTR_MAX_BUFFER_SIZE (integer)

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

PDO::MYSQL_ATTR_DIRECT_QUERY (integer)

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

PDO::MYSQL_ATTR_FOUND_ROWS (integer)

Возвратите количество найденных строк, а не количество измененных.

PDO::MYSQL_ATTR_IGNORE_SPACE (integer)

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

PDO::MYSQL_ATTR_COMPRESS (integer)

Позволить сетевое коммуникационное сжатие. Это также поддерживается, когда собрано с mysqlnd с PHP 5.3.11.

PDO::MYSQL_ATTR_SSL_CA (integer)

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

Это существует с PHP 5.3.7.

PDO::MYSQL_ATTR_SSL_CAPATH (integer)

Путь к каталогу, который содержит сертификаты доверенных SSL CA, которые сохранены в формате PEM.

Это существует с PHP 5.3.7.

PDO::MYSQL_ATTR_SSL_CERT (integer)

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

Это существует с PHP 5.3.7.

PDO::MYSQL_ATTR_SSL_CIPHER (integer)

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

Это существует с PHP 5.3.7.

PDO::MYSQL_ATTR_SSL_KEY (integer)

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

Это существует с PHP 5.3.7.

PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT (integer)

Обеспечивает способ отключить проверку сертификата SSL сервера.

Это существует с PHP 7.0.18 и PHP 7.1.4.

PDO::MYSQL_ATTR_MULTI_STATEMENTS (integer)

Отключает выполнение мультизапросов в обоих PDO::prepare и PDO::query, когда установлено в FALSE.

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

Это существует с PHP 5.5.21 и PHP 5.6.5.

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

Таблица 4.2. Опции настройки PDO_MYSQL

ИмяУмолчание Изменяемый
pdo_mysql.default_socket"/tmp/mysql.sock" PHP_INI_SYSTEM
pdo_mysql.debugNULLPHP_INI_SYSTEM

Для получения дальнейшей информации и определения режимов PHP_INI_*, см. http://www.php.net/manual/en/configuration.changes.modes.

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

pdo_mysql.default_socket string

Устанавливает сокет Unix. Это значение может быть установлено во время компиляции, если сокет найден. Это ini-установка только в Unix.

pdo_mysql.debug boolean

Позволяет отладить PDO_MYSQL. Это доступно только, когда PDO_MYSQL собран с mysqlnd в режиме отладки PDO.

4.1. PDO_MYSQL DSN

  • PDO_MYSQL DSN

    Соединение с базами данных MySQL.

Описание

PDO_MYSQL Data Source Name (DSN) состоит из следующих элементов:

Префикс DSN

Это mysql:.

host

Имя хоста, на котором работает сервер базы данных.

port

Номер порта, где сервер базы данных слушает.

dbname

Название базы данных.

unix_socket

Сокет MySQL Unix (не должен использоваться с host или port).

charset

Набор символов. См. документацию character set для получения дополнительной информации.

До PHP 5.3.6 этот элемент был тихо проигнорирован. То же самое поведение может частично копироваться с опцией драйвера PDO::MYSQL_ATTR_INIT_COMMAND, см. ниже.

Метод в примере ниже может использоваться только с наборами символов, которые разделяют то же самое низкое 7-битное представление как ASCII, такими как ISO-8859-1 и UTF-8. Пользователи, использующие наборы символов, у которых есть различные представления (такие как UTF-16 или Big5) должны использовать параметр charset в PHP 5.3.6 и позже.

Пример 4.2. Установить набор символов связи в UTF-8 до PHP 5.3.6

<?php
  $dsn = 'mysql:host=localhost;dbname=testdb';
  $username = 'username';
  $password = 'password';
  $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',);
  $dbh = new PDO($dsn, $username, $password, $options);
?>

Журнал изменений

Версия Описание
5.3.6 До версии 5.3.6 charset игнорируется.

Примеры

Пример 4.3. PDO_MYSQL DSN

Следующий пример показывает PDO_MYSQL DSN для соединения с базами данных MySQL:

mysql:host=localhost;dbname=testdb

Более полные примеры:

mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb

Примечания

Когда имя хоста установлено в "localhost", тогда связь с сервером установлена через сокет. Если PDO_MYSQL собран с libmysqlclient, местоположение файла сокета вкомпилировано в libmysqlclient. Если PDO_MYSQL собран с mysqlnd, сокет по умолчанию может быть установлен посредством pdo_mysql.default_socket.

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru