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