如何设置PDO默认主机?

时间:2012-02-23 18:27:02

标签: php mysql pdo mysqli php-ini

我正在尝试将一些PHP代码从Mysqli转换为PDO,我需要能够为PDO MySQL连接设置一个默认主机(在我的应用程序代码之外)。

使用Mysqli,我可以使用php.ini设置执行此操作:

mysqli.default_host = ip.of.mysql.server

然后连接:

$link = mysqli_connect(null,  USERNAME,  PASSWORD, DATABASE);

这对我们很有效。


PDO的等效代码:

$link = new PDO('mysql:dbname=' . DATABASE, USERNAME, PASSWORD);

不能以相同的方式工作。只要我的MySQL服务器在localhost上,它就可以工作。事实并非如此。我有一台托管MySQL服务器的独立机器。

是否有相同的php.ini设置可以完成我需要的PDO?我发现最接近的是pdo_mysql.default_socket设置,但我认为不会这样做。

2 个答案:

答案 0 :(得分:2)

根据php.ini中的PDO documentation, you can set pdo.dsn别名。

在php.ini中:

pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"

在PHP中:

$dbh = new PDO('mydb', $user, $password);

或者,您可以使用主机并更改hosts文件中的IP地址。这不在应用程序代码中。

答案 1 :(得分:1)

套接字连接仅在本地连接上有用。您必须明确指定主机

mysql:host=123.123.123.1;dbname=MyDb

更新:刚刚发现了一些东西

http://php.net/pdo.configuration

据我所知,您可以为dsns定义别名。我自己没有尝试过,但看起来应该是

pdo.dsn.otherServer = mysql:host=example.com;dbname=foo

然后你应该可以在PDO::__construct()

中使用它
$pdo = new PDO('otherServer', $x, $y);

另外,您可以将文件路径指定为构造函数参数,该文件路径指向包含dsn-string的文件

$pdo = new PDO('uri:file///usr/share/connection.dsn', $x, $y);
// With file /usr/share/connection.dsn that contains: (and nothing more than)
mysql:host=example.com;dbname=foo