PDO无法连接远程MySQL服务器。

8

服务器A(192.168.1.3)

mysql服务器(版本5.6.12)端口为6603,套接字为/var/run/mysql/mysql.sock

php(版本5.5.0)中的php.ini文件pdo_mysql.default_socket = /var/run/mysql/mysql.sock

服务器B(192.168.1.4)

mysql服务器(版本5.5.11)端口为3306,套接字为/var/run/mysql/mysql.sock

在使用时,服务器A可以正常工作。

$conn = new PDO('mysql:hostname=localhost;dbname=DB_TEST','username','password');

但是在使用时无法连接到B服务器

$conn = new PDO('mysql:hostname=192.168.1.4;dbname=DB_TEST;port=3306','username','password');

错误:SQLSTATE[28000] [1045] 拒绝访问用户 'username'@'localhost'(使用密码:是)

但可以正常工作

$conn = mysql_connect('192.168.1.4:3306', 'username', 'password');
3个回答

19
$conn = new PDO('mysql:hostname=192.168.1.4;dbname=DB_TEST;port=3306','username','password');

应该是

$conn = new PDO('mysql:host=192.168.1.4;dbname=DB_TEST;port=3306','username','password');

hostname 对于 dsn 来说是无效的,因此 PDO 忽略了该主机并使用默认主机,即 localhost


12

好的,我也遇到了同样的问题。解决方法是在

mysql: host之间加上空格--> 这个非常有效!!!

这样你就可以连接到远程mysql。


1
不知道你为什么被投票贬低了。这对我来说完美地运作了。谢谢。 - Ste77
这解决了我的问题,而且说实话,主要问题是连接字符串中的空格 $conn = mysql_connect('192.168.1.4:3306',<-->'用户名',<---> '密码'); - Asuquo12

3
远程PDO MySQL连接的问题在于数据库字符串。正确的语句是:
$conn = new PDO('mysql:host=192.168.1.4:3306;dbname=DB_TEST','username','password');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接