PHP 7.2.0 Release Candidate 4 Released

PDO_MYSQL DSN

(PECL PDO_MYSQL >= 0.1.0)

PDO_MYSQL DSNMySQL データベースに接続する

説明

PDO_MYSQL データソース名 (DSN) は以下の要素で構成されます。

DSN 接頭辞

DSN 接頭辞は mysql: です。

host

データベースサーバーが存在するホスト名を指定します。

port

データベースサーバーが待機しているポートを指定します。

dbname

データベース名を指定します。

unix_socket

MySQL の unix ソケットを指定します (host あるいは port と同時に使用することはできません)。

charset

文字セット。詳細は、 文字セットの概念 を参照ください。

PHP 5.3.6 より前のバージョンでは、この要素は黙って無視されていました。 同じ挙動は、ドライバのオプション PDO::MYSQL_ATTR_INIT_COMMAND を使って部分的に複製できます。 その方法は次の例で示します。

警告

次の例に示す方法が使えるのは、下位 7 ビットが ASCII と互換性のある文字セット、 つまり ISO-8859-1 や UTF-8 などだけです。それ以外の文字セット (UTF-16 や Big5 など) を使う場合は、必ず PHP 5.3.6 以降の charset オプションを使わなければなりません。

例1 PHP 5.3.6 より前のバージョンで、文字セットを UTF-8 に設定する例

<?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 は無視されていました。

例2 PDO_MYSQL DSN の例

以下の例は、MySQL データベースに接続するための PDO_MYSQL DSN を表します。

mysql:host=localhost;dbname=testdb
より完全な例は、このようになります。
mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb

注意

注意: Unix のみ

ホスト名を "localhost" にすると、 サーバーへの接続はドメインソケットを使って行われます。 libmysqlclient を使って PDO_MYSQL をコンパイルした場合は、 ソケットファイルの場所は libmysqlclient のコンパイル時の場所になります。 mysqlnd を使って PDO_MYSQL をコンパイルした場合は、デフォルトのソケットは pdo_mysql.default_socket の設定を使って作られます。

add a note add a note

User Contributed Notes 4 notes

up
23
codeslinger at compsalot dot com
8 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.
up
1
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.

<?php
$pipeName
= 'my_awesome_pipe';
$username = 'username';
$password = 'password';
$dbh = new PDO('mysql:unix_socket='.$pipeName, $username, $password);
?>
up
0
rhian
10 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;

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

See original solution here:
http://stackoverflow.com/a/25432156
up
0
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;

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

See original solution here:
http://stackoverflow.com/a/25432156
To Top