<?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> As of PHP 5.2.1, PDO_MYSQL uses emulated prepares by default. Formerly, PDO_MYSQL defaulted to native prepared statement support present in MySQL 4.1 and higher, and emulated them for older versions of the mysql client libraries. </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> <para> Prior to PHP 5.3.6, this element was silently ignored. The same behaviour can be partly replicated with the <constant>PDO::MYSQL_ATTR_INIT_COMMAND</constant> driver option, as the following example shows. </para> <warning> <simpara> The method in the below example can only be used with character sets that share the same lower 7 bit representation as ASCII, such as ISO-8859-1 and UTF-8. Users using character sets that have different representations (such as UTF-16 or Big5) <emphasis>must</emphasis> use the <literal>charset</literal> option provided in PHP 5.3.6 and later versions. </simpara> </warning> <para> <example> <title> Setting the connection character set to UTF-8 prior to PHP 5.3.6 </title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> </example> </para> </listitem> </varlistentry> </variablelist> </para> </refsect1> <refsect1 role="changelog"> &reftitle.changelog; <para> <informaltable> <tgroup cols="2"> <thead> <row> <entry>&Version;</entry> <entry>&Description;</entry> </row> </thead> <tbody> <row> <entry>5.3.6</entry> <entry> Prior to version 5.3.6, <literal>charset</literal> was ignored. </entry> </row> </tbody> </tgroup> </informaltable> </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 -->