<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->

 <reference xml:id="ref.pdo-mysql" xmlns="http://docbook.org/ns/docbook">
  <?phpdoc extension-membership="bundledexternal" ?>
  <title>MySQL Functions (PDO_MYSQL)</title>
  <titleabbrev>MySQL (PDO)</titleabbrev>
  <partintro>

   <section xml:id="pdo-mysql.intro">
   &reftitle.intro;
    <para>
     PDO_MYSQL is a driver that implements the <link linkend="intro.pdo">PHP
     Data Objects (PDO) interface</link>
     to enable access from PHP to MySQL databases.
    </para>
    <para>
     PDO_MYSQL uses emulated prepares by default.
    </para>

    <para>
      <emphasis role="bold">MySQL 8</emphasis>
    </para>

    <para>
     When running a PHP version before 7.1.16, or PHP 7.2 before 7.2.4, set 
     MySQL 8 Server's default password plugin to <emphasis>mysql_native_password</emphasis>
     or else you will see errors similar to
     <emphasis>The server requested authentication method unknown to the client [caching_sha2_password]</emphasis>
     even when <emphasis>caching_sha2_password</emphasis> is not used.
    </para>
    <para>
     This is because MySQL 8 defaults to caching_sha2_password, a plugin that is
     not recognized by the older PHP (mysqlnd) releases. Instead, change it by
     setting <literal>default_authentication_plugin=mysql_native_password</literal>
     in <filename>my.cnf</filename>. The <emphasis>caching_sha2_password</emphasis>
     plugin will be supported in a future PHP release. In the meantime, the
     <link linkend="book.mysql-xdevapi">mysql_xdevapi</link> extension does
     support it.
    </para>

    <warning>
     <para>
      Beware: Some MySQL table types (storage engines) do not support transactions.  When
      writing transactional database code using a table type that does not support
      transactions, MySQL will pretend that a transaction was initiated successfully.
      In addition, any DDL queries issued will implicitly
      commit any pending transactions.
     </para>
    </warning>
   </section>
   &reference.pdo-mysql.configure;
   &reference.pdo-mysql.constants;
   &reference.pdo-mysql.ini;
  </partintro>

  <refentry xml:id="ref.pdo-mysql.connection">
   <refnamediv>
    <refname>PDO_MYSQL DSN</refname>
    <refpurpose>Connecting to MySQL databases</refpurpose>
   </refnamediv>

   <refsect1 role="description">
    &reftitle.description;
    <para>
     The PDO_MYSQL Data Source Name (DSN) is composed of the following elements:
     <variablelist>
      <varlistentry>
       <term>DSN prefix</term>
       <listitem>
        <para>
        The DSN prefix is <userinput>mysql:</userinput>.
        </para>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term><literal>host</literal></term>
       <listitem>
        <para>
         The hostname on which the database server resides.
        </para>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term><literal>port</literal></term>
       <listitem>
        <para>
         The port number where the database server is listening.
        </para>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term><literal>dbname</literal></term>
       <listitem>
        <para>
         The name of the database.
        </para>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term><literal>unix_socket</literal></term>
       <listitem>
        <para>
         The MySQL Unix socket (shouldn't be used with <literal>host</literal>
         or <literal>port</literal>).
        </para>
       </listitem>
      </varlistentry>
      <varlistentry>
       <term><literal>charset</literal></term>
       <listitem>
        <para>
         The character set. See the <link linkend="mysqlinfo.concepts.charset">character set</link>
         concepts documentation for more information.
        </para>
       </listitem>
      </varlistentry>
     </variablelist>
    </para>
   </refsect1>

   <refsect1 role="examples">
    &reftitle.examples;
    <para>
     <example>
      <title>PDO_MYSQL DSN examples</title>
      <para>
       The following example shows a PDO_MYSQL DSN for connecting to
       MySQL databases:
       <programlisting>
<![CDATA[
mysql:host=localhost;dbname=testdb
]]>
       </programlisting>
       More complete examples:
       <programlisting>
<![CDATA[
mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb
]]>
       </programlisting>
      </para>
     </example>
    </para>
   </refsect1>

   <refsect1 role="notes">
    &reftitle.notes;
    <note>
     <title>Unix only:</title>
     <para>
      When the host name is set to <literal>"localhost"</literal>, then the connection to the 
      server is made thru a domain socket. If PDO_MYSQL is compiled against libmysqlclient then the 
      location of the socket file is at libmysqlclient's compiled in location. If PDO_MYSQL is compiled 
      against mysqlnd a default socket can be set thru the <link linkend="ini.pdo-mysql.default-socket">
      pdo_mysql.default_socket</link> setting.
     </para>
    </note>
   </refsect1>
  </refentry>

 </reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->