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.
(PECL PDO_MYSQL >= 0.1.0)
PDO_MYSQL DSN — MySQL データベースに接続する
PDO_MYSQL データソース名 (DSN) は以下の要素で構成されます。
DSN 接頭辞は mysql:
です。
host
データベースサーバーが存在するホスト名を指定します。
port
データベースサーバーが待機しているポートを指定します。
dbname
データベース名を指定します。
unix_socket
MySQL の unix ソケットを指定します (host
あるいは port
と同時に使用することはできません)。
charset
文字セット。詳細は、 文字セットの概念 を参照ください。
例1 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 の設定を使って作られます。
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.
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
here is the example i prefer myself, in my opinion, this is almost always "the correct way" to do it:
<?php
$db = new \PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'username', 'password', array(
\PDO::ATTR_EMULATE_PREPARES => false,
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
));