CakeFest 2017 NYC, the Official CakePHP Conference


(PECL PDO_MYSQL >= 0.1.0)

PDO_MYSQL DSNConnecting to MySQL databases


The PDO_MYSQL Data Source Name (DSN) is composed of the following elements:

DSN prefix

The DSN prefix is mysql:.


The hostname on which the database server resides.


The port number where the database server is listening.


The name of the database.


The MySQL Unix socket (shouldn't be used with host or port).


The character set. See the character set concepts documentation for more information.

Prior to PHP 5.3.6, this element was silently ignored. The same behaviour can be partly replicated with the PDO::MYSQL_ATTR_INIT_COMMAND driver option, as the following example shows.


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) must use the charset option provided in PHP 5.3.6 and later versions.

Example #1 Setting the connection character set to UTF-8 prior to PHP 5.3.6

$username 'username';
$password 'password';
$options = array(

$dbh = new PDO($dsn$username$password$options);

Log delle modifiche

Versione Descrizione
5.3.6 Prior to version 5.3.6, charset was ignored.


Example #2 PDO_MYSQL DSN examples

The following example shows a PDO_MYSQL DSN for connecting to MySQL databases:

More complete examples:


Nota: Unix only:

When the host name is set to "localhost", 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 pdo_mysql.default_socket setting.

add a note add a note

User Contributed Notes 7 notes

codeslinger at compsalot dot com
7 years ago
I have tested this and found that the "dbname" field is optional.  Which is a good thing if you must first create the db.

After creating a db be sure to exec a "use dbname;"  command, or else use fully specified table references.
siguza at siguza dot net dot IGNORETHIS
2 years ago
It should be noted that unix_socket can also be used for named pipes under Windows.

= 'my_awesome_pipe';
$username = 'username';
$password = 'password';
$dbh = new PDO('mysql:unix_socket='.$pipeName, $username, $password);
2 months ago
xwisdom made a mistake in his comment and got it backwards, correction below:

If you are having problems accessing a remote MYSQL database, the solution is to make sure that you add a white-space after "mysql:"

Change this...:
mysql:host=remote; this:
mysql: host=remote;

See original solution here:
xwisdom at gmail dot com
1 year ago
If you are having problems accessing a remote MYSQL database, the solution is to make sure that you remove any white-space after "mysql:"

Change this...:
mysql: host=remote; this:

See original solution here:
rustamabd at gmail dot com
7 years ago
Even though pdo_mysql accepts an additional "charset" parameter in the DSN (see mysql_driver.c:442), as of PHP 5.2.9 it does not do anything with it.

A possible workaround to set the charset to UTF-8, for example, could be:

= new PDO("mysql:$connstr"$user, $password);

$dbh -> exec("set names utf8");

damien at mc-kenna dot com
5 years ago
It appears that internally the host string infers a default of "localhost", e.g. this appears to work as a valid $dsn: mysql:host=;port=3306
johne dot doe at hotmail dot com
3 years ago
on unix machines create a php file with the following content:


and execute it. Search for MYSQL_SOCKET or mysqli.default_socket to get the correct path for unixsocket= ...
To Top