<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/pdo.drivers.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'ref.pdo-mysql.php',
    1 => 'PDO-драйвер СУБД MySQL',
    2 => 'PDO_MYSQL: драйвер модуля PDO для СУБД MySQL',
  ),
  'up' => 
  array (
    0 => 'pdo.drivers.php',
    1 => 'Драйверы модуля PDO',
  ),
  'prev' => 
  array (
    0 => 'ref.pdo-informix.connection.php',
    1 => 'DSN-строка подключения для драйвера PDO_INFORMIX',
  ),
  'next' => 
  array (
    0 => 'ref.pdo-mysql.connection.php',
    1 => 'DSN-строка подключения через драйвер PDO_MYSQL',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/pdo_mysql/reference.xml',
  ),
  'history' => 
  array (
  ),
  '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);

contributors($setup);

?>
<div id="ref.pdo-mysql" class="reference">
 
 <h1 class="title">PDO_MYSQL: драйвер модуля PDO для СУБД MySQL</h1>
 
 <div class="partintro">

  <div class="section" id="ref.pdo-mysql.intro">
  <h2 class="title">Введение</h2>
   <p class="para">
    PDO_MYSQL — драйвер, через который PHP получает доступ к базам данных MySQL.
    Для этого драйвер реализует интерфейс модуля <a href="book.pdo.php#intro.pdo" class="link">PDO</a>.
   </p>
   <p class="para">
    Драйвер PDO_MYSQL по умолчанию использует эмулированную подготовку.
   </p>

   <p class="para">
     <strong>MySQL 8</strong>
   </p>

   <p class="para">
    При запуске PHP до версии 7.1.16 или PHP с версии 7.2 до версии 7.2.4
    в качестве плагина шифрования паролей по умолчанию для сервера MySQL 8 устанавливают
    <em>mysql_native_password</em>, иначе выдаётся ошибка наподобие
    <em>The server requested authentication method unknown to the client [caching_sha2_password]</em>,
    даже когда плагин <em>caching_sha2_password</em> не задали.
   </p>
   <p class="para">
    Причина этого состоит в том, что на сервере MySQL 8
    в качестве плагина по умолчанию указан caching_sha2_password,
    который не распознаётся старыми выпусками PHP (драйвером mysqlnd).
    Вместо него в файле конфигурации сервера <var class="filename">my.cnf</var> указывают —
    <code class="literal">default_authentication_plugin=mysql_native_password</code>.
    Плагин <em>caching_sha2_password</em>
    получил полную поддержку начиная с PHP 7.4.4. В предыдущих версиях PHP
    его поддерживает модуль <a href="book.mysql-xdevapi.php" class="link">mysql_xdevapi</a>.
   </p>

   <div class="warning"><strong class="warning">Внимание</strong>
    <p class="para">
     Осторожно: MySQL-таблицы подсистемы хранения данных не поддерживают транзакции.
     БД MySQL сделает вид, что транзакция успешно началась,
     если в коде, который работает с транзакционной базой данных,
     указали таблицу, которая не поддерживает транзакции.
     Кроме того, каждый выполненный DDL-запрос
     будет неявно фиксировать незавершённые транзакции — то есть завершать открытые транзакции
     и выполнять стек незавершённых запросов.
    </p>
   </div>
   <blockquote class="note"><p><strong class="note">Замечание</strong>: 
    <p class="para">
     Драйвер MySQL неправильно обрабатывает бит <strong><code><a href="pdo.constants.php#pdo.constants.param-input-output">PDO::PARAM_INPUT_OUTPUT</a></code></strong>
     в методе <span class="methodname"><a href="pdostatement.bindparam.php" class="methodname">PDOStatement::bindParam()</a></span>;
     хотя такие параметры и разрешается указывать,
     они не обновляются (т. е. фактический вывод игнорируется).
    </p>
   </p></blockquote>
  </div>
  


<div class="section" id="ref.pdo-mysql.installation">
 <h2 class="title">Установка</h2>
 <p class="para">
  Обычно установочные пакеты Unix имеют в своём составе бинарные пакеты PHP.
  Несмотря на то, что эти бинарные пакеты обычно собраны с поддержкой модуля MySQL,
  может понадобиться установка библиотек модулей отдельно. Проверьте
  свой дистрибутив на наличие нужных библиотек через пакетный менеджер.
 </p>
 <p class="para">
  К примеру, на Ubuntu установка пакета <code class="literal">php5-mysql</code> устанавливает
  модули ext/mysql, ext/mysqli, и PDO_MYSQL. На CentOS пакет <code class="literal">php-mysql</code>
  также устанавливает эти три модуля.
 </p>

 <p class="para">
  Также вы всегда можете скомпилировать необходимые модули самостоятельно. Сборка
  PHP из исходных кодов позволит вам собрать именно те модули MySQL, которые вам
  нужны, а также выбрать нужную клиентскую библиотеку для каждого модуля.
 </p>

 <p class="para">
  Используйте <strong class="option configure">--with-pdo-mysql[=DIR]</strong> для установки
  модуля PDO MySQL, где необязательный параметр <code class="literal">[=DIR]</code>
  указывает директорию, где установлена MySQL. По умолчанию
  используется библиотека <a href="book.mysqlnd.php" class="link">mysqlnd</a>. Более детальный
  разбор по выбору библиотеки можно почитать в разделе &quot;<a href="mysqlinfo.library.choosing.php" class="link">Выбор библиотеки MySQL</a>&quot;.
 </p>
 <p class="para">
  Дополнительный параметр <strong class="option configure">--with-mysql-sock[=DIR]</strong>
  указывает расположение unix-сокета MySQL для всех MySQL модулей, включая
  PDO_MYSQL. Если параметр не указан, поиск производится в директориях по умолчанию.
 </p>
 <p class="para">
  Дополнительный параметр <strong class="option configure">--with-zlib-dir[=DIR]</strong>
  используется как префикс пути к libz.
 </p>
 <p class="para">
  <div class="example-contents screen">
<div class="cdata"><pre>
$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock
</pre></div>
  </div>
 </p>
 <p class="para">
  Поддержка <abbr title="Secure Sockets Layer">SSL</abbr> включается, используя соответствующую
  константу <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ssl-key">Pdo\Mysql::ATTR_SSL_<span class="replaceable">*</span></a></code></strong>,
  которая эквивалентна вызову <a href="https://dev.mysql.com/doc/c-api/8.4/en/mysql-ssl-set.html" class="link external">&raquo;&nbsp;API MySQL-функции mysql_ssl_set() в C</a>.
  К тому же SSL не может быть включён с помощью <span class="classname"><strong class="classname">PDO::setAttribute</strong></span>, потому что соединение
  уже существует. Смотрите документацию MySQL о <a href="https://dev.mysql.com/doc/en/using-encrypted-connections.html" class="link external">&raquo;&nbsp;подключении к
  MySQL с SSL</a>.
 </p>

</div>

  


<div class="section" id="ref.pdo-mysql.constants">
 <h2 class="title">Предопределённые константы</h2>
 <p class="simpara">Драйвер
определяет следующие константы и открывает доступ к ним только тогда, когда PHP собрали
с поддержкой этого модуля, или модуль динамически загрузили при выполнении кода.
Константы, которые зависят от драйвера, разрешается использовать только совместно с драйвером.
Атрибуты одного драйвера с другим драйвером ведут себя неожиданно. Чтобы проверить название
драйвера, которое содержит атрибут <strong><code><a href="pdo.constants.php#pdo.constants.attr-driver-name">PDO::ATTR_DRIVER_NAME</a></code></strong>, вызывают
метод <span class="function"><a href="pdo.getattribute.php" class="function">PDO::getAttribute()</a></span>, если код запускается с несколькими драйверами.</p>
 <dl>
  
   <dt id="pdo.constants.mysql-attr-use-buffered-query">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-use-buffered-query">PDO::MYSQL_ATTR_USE_BUFFERED_QUERY</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-use-buffered-query">Pdo\Mysql::ATTR_USE_BUFFERED_QUERY</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-local-infile">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-local-infile">PDO::MYSQL_ATTR_LOCAL_INFILE</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-local-infile">Pdo\Mysql::ATTR_LOCAL_INFILE</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-local-infile-directory">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-local-infile-directory">PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-local-infile-directory">Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY</a></code></strong>.
     Константа доступна с PHP 8.1.0.
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-init-command">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-init-command">PDO::MYSQL_ATTR_INIT_COMMAND</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-init-command">Pdo\Mysql::ATTR_INIT_COMMAND</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-read-default-file">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-read-default-file">PDO::MYSQL_ATTR_READ_DEFAULT_FILE</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-read-default-file">Pdo\Mysql::ATTR_READ_DEFAULT_FILE</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-read-default-group">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-read-default-group">PDO::MYSQL_ATTR_READ_DEFAULT_GROUP</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-read-default-group">Pdo\Mysql::ATTR_READ_DEFAULT_GROUP</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-max-buffer-size">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-max-buffer-size">PDO::MYSQL_ATTR_MAX_BUFFER_SIZE</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-max-buffer-size">Pdo\Mysql::ATTR_MAX_BUFFER_SIZE</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-direct-query">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-direct-query">PDO::MYSQL_ATTR_DIRECT_QUERY</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="pdo.constants.php#pdo.constants.attr-emulate-prepares">PDO::ATTR_EMULATE_PREPARES</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-found-rows">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-found-rows">PDO::MYSQL_ATTR_FOUND_ROWS</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-found-rows">Pdo\Mysql::ATTR_FOUND_ROWS</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-ignore-space">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-ignore-space">PDO::MYSQL_ATTR_IGNORE_SPACE</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ignore-space">Pdo\Mysql::ATTR_IGNORE_SPACE</a></code></strong>
    </span>
   </dd>
  
  
   <dt id="pdo.constants.mysql-attr-compress">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-compress">PDO::MYSQL_ATTR_COMPRESS</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-compress">Pdo\Mysql::ATTR_COMPRESS</a></code></strong>
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-server-public-key">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-server-public-key">PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-server-public-key">Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY</a></code></strong>
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-ssl-ca">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-ssl-ca">PDO::MYSQL_ATTR_SSL_CA</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ssl-ca">Pdo\Mysql::ATTR_SSL_CA</a></code></strong>
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-ssl-capath">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-ssl-capath">PDO::MYSQL_ATTR_SSL_CAPATH</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ssl-capath">Pdo\Mysql::ATTR_SSL_CAPATH</a></code></strong>
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-ssl-cert">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-ssl-cert">PDO::MYSQL_ATTR_SSL_CERT</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ssl-cert">Pdo\Mysql::ATTR_SSL_CERT</a></code></strong>
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-ssl-cipher">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-ssl-cipher">PDO::MYSQL_ATTR_SSL_CIPHER</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ssl-cipher">Pdo\Mysql::ATTR_SSL_CIPHER</a></code></strong>
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-ssl-key">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-ssl-key">PDO::MYSQL_ATTR_SSL_KEY</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ssl-key">Pdo\Mysql::ATTR_SSL_KEY</a></code></strong>
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-ssl-verify-server-cert">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-ssl-verify-server-cert">PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-ssl-verify-server-cert">Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERT</a></code></strong>
     Константа доступна с PHP 7.0.18 и PHP 7.1.4.
    </span>
   </dd>
  

  
   <dt id="pdo.constants.mysql-attr-multi-statements">
    <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-multi-statements">PDO::MYSQL_ATTR_MULTI_STATEMENTS</a></code></strong>
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)
   </dt>
   <dd>
    <span class="simpara">
     Псевдоним <strong><code><a href="class.pdo-mysql.php#pdo-mysql.constants.attr-multi-statements">Pdo\Mysql::ATTR_MULTI_STATEMENTS</a></code></strong>
    </span>
   </dd>
  

 </dl>
</div>


  


<div class="section" id="pdo-mysql.configuration">
 <h2 class="title">Настройка во время выполнения</h2>
 <p class="simpara">
Поведение функций зависит от установок в файле <var class="filename">php.ini</var>.
</p>
 <p class="para">
  <table class="doctable table">
   <caption><strong>Опции конфигурации PDO_MYSQL</strong></caption>
   
    <thead>
     <tr>
      <th>Имя</th>
      <th>По умолчанию</th>
      <th>Место изменения</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td><a href="ref.pdo-mysql.php#ini.pdo-mysql.default-socket" class="link">pdo_mysql.default_socket</a></td>
      <td>&quot;/tmp/mysql.sock&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
     </tr>

     <tr>
      <td><a href="ref.pdo-mysql.php#ini.pdo-mysql.debug" class="link">pdo_mysql.debug</a></td>
      <td>NULL</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
     </tr>

    </tbody>
   
  </table>

  Дополнительную информацию и определения режимов
INI_* даёт раздел «<a href="configuration.changes.modes.php" class="xref">Места установки параметров конфигурации</a>».
 </p>

 <p class="para">Краткое разъяснение конфигурационных
директив.</p>

 <p class="para">
  <dl>
   
    <dt id="ini.pdo-mysql.default-socket">
     <code class="parameter">pdo_mysql.default_socket</code>
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
    </dt>
    <dd>
     <p class="para">
      Устанавливает сокет домена UNIX. Эту опцию необходимо указать во время компиляции,
      если сокет домена найден во время конфигурирования. Эта настройка только для Unix.
     </p>
    </dd>
   
   
    <dt id="ini.pdo-mysql.debug">
     <code class="parameter">pdo_mysql.debug</code>
     <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
    </dt>
    <dd>
     <p class="para">
      Разрешает отладку для PDO_MYSQL. Эта настройка доступна только, если PDO_MYSQL
      скомпилирован с &quot;mysqlnd&quot; и в режиме отладки PDO.
     </p>
    </dd>
   
  </dl>
 </p>
</div>


 </div>

 

<h2>Содержание</h2><ul class="chunklist chunklist_reference"><li><a href="ref.pdo-mysql.connection.php">DSN-строка подключения через драйвер PDO_MYSQL</a> — Соединение с базой данных MySQL</li></ul>
</div>
<?php manual_footer($setup); ?>