2

我正在尝试将一些 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 服务器在本地主机上,它就可以工作。它不是。我有一台单独的机器托管我的 MySQL 服务器。

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

4

2 回答 2

2

根据PDO 文档,您可以在 php.ini 中设置 pdo.dsn别名。

在 php.ini 中:

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

在 PHP 中:

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

或者,您可以使用主机并更改主机文件中的 IP 地址。那是在应用程序代码之外。

于 2012-02-23T18:43:02.227 回答
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 字符串的文件

$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
于 2012-02-23T18:31:51.477 回答