【问题标题】:How to set PDO default host?如何设置 PDO 默认主机?
【发布时间】:2012-02-23 18:27:02
【问题描述】:

我正在尝试将一些 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 设置,但我认为不会这样做。

【问题讨论】:

  • 您可以使用主机并更改主机文件中的 IP 地址。这在应用程序代码之外。
  • 对我来说似乎有点 hacky,但如果没有官方的方法可以做到这一点,我可能会这样做。

标签: php mysql pdo mysqli php-ini


【解决方案1】:

根据 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);

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

【讨论】:

  • 通过“更改主机文件中的 IP 地址”,您真的是指 localhost 应该指向其他任何东西,而不是本地机器?
  • 我认为他的意思是我想使用的任何域,而不是 localhost。
  • 是的,使用localhost 以外的实际主机名。如果您更改了 localhost 的 IP,那会令人困惑。 :)
  • 我想很多的东西会坏掉 ;-)
  • 已接受答案。不得不走主机路线。我很失望 PDO 没有提供这样做的方法,但有一个解决方案!
【解决方案2】:

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

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

【讨论】:

  • 我就是这么想的。我知道我可以明确地提供主机。我正在寻找的是一种在我的应用程序代码之外的某个地方设置默认主机的方法,例如 la Mysqli。我真的希望这是可能的。
  • 关于您的编辑:太完美了!我现在就测试一下。
  • 必须说:之前没有意识到。对我来说听起来也很酷 :) 这允许将数据库(配置)与应用程序分开并将其直接绑定到环境。
  • Arg!如此接近,却又如此遥远。它确实有效,但现在我的数据库名称也在应用程序之外,现在在代码中动态引用(并且需要)。看来我不能把两者分开。要么全部出来,要么全部进去。我可能不得不走主机文件路线。
  • 数据库名称应该有多动态?您可以定义任意数量的别名。如果您有 5 个数据库,为什么不定义 5 个别名?或者看看第二种解决方案:将您的多个数据库写入单独的文件并通过uri:-style dsn 加载它们。
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多