我测试了这一点,发现 "dbname" 字段是可选的。如果您必须先创建数据库,这是一件好事。
创建数据库后,请确保执行 "use dbname;" 命令,否则使用完全限定的表引用。
(PECL PDO_MYSQL >= 0.1.0)
PDO_MYSQL DSN — 连接到 MySQL 数据库
PDO_MYSQL 数据源名称 (DSN) 由以下元素组成
DSN 前缀为 mysql:
。
主机
数据库服务器所在的 hostname。
端口
数据库服务器监听的端口号。
数据库
数据库的名称。
unix_socket
MySQL Unix 套接字(不应该与 host
或 port
一起使用)。
字符集
字符集。有关更多信息,请参见 字符集 概念文档。
示例 #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"
时,则通过域套接字建立与服务器的连接。如果 PDO_MYSQL 针对 libmysqlclient 进行编译,则套接字文件的位置位于 libmysqlclient 的编译位置。如果 PDO_MYSQL 针对 mysqlnd 进行编译,则可以通过 pdo_mysql.default_socket 设置来设置默认套接字。
我测试了这一点,发现 "dbname" 字段是可选的。如果您必须先创建数据库,这是一件好事。
创建数据库后,请确保执行 "use dbname;" 命令,否则使用完全限定的表引用。
xwisdom 在他的评论中犯了一个错误,颠倒了顺序,更正如下
如果您在访问远程 MYSQL 数据库时遇到问题,解决方法是在 "mysql:" 之后添加一个空格。
更改以下内容...
mysql:host=remote;
... 更改为以下内容
mysql: host=remote;
参见此处原始解决方案
http://stackoverflow.com/a/25432156
这是我个人喜欢的示例,在我看来,这几乎总是 "正确的方式" 来做这件事
<?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
));