我已经测试过这个,发现“dbname”字段是可选的。如果你必须先创建数据库,这是一件好事。
创建数据库后,请务必执行“use dbname;”命令,否则请使用完全限定的表引用。
(PECL PDO_MYSQL >= 0.1.0)
PDO_MYSQL DSN — 连接到MySQL数据库
PDO_MYSQL 数据源名称 (DSN) 由以下元素组成:
DSN 前缀为 mysql:
。
主机
数据库服务器所在的服务器主机名。
端口
数据库服务器监听的端口号。
数据库名
数据库的名称。
Unix套接字
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
));