PHP& PDO:使用IPv6地址连接到MySQL

时间:2015-05-22 13:36:12

标签: php mysql pdo ipv6

我希望使用其IPv6地址连接到远程MySQL实例(Google Cloud SQL实例)。

我正在使用PHP PDO:

$db = new \PDO('mysql:host=<ipv6-address>;port=3306;dbname=<database-name>',
  '<username>',
  '<password>'
);

但它始终失败并显示以下异常消息:

  

PDOException:SQLSTATE [HY000] [2002]无主机路由

从终端我可以连接到MySQL实例,没有任何问题,如下所示:

mysql --host=<ipv6-address> --user=<username> --<password>

任何帮助都将非常感激。

由于

2 个答案:

答案 0 :(得分:3)

阅读此https://www.saotn.org/php-mysql-and-ipv6-still-slow/会产生以下想法:

  

通常情况下,IPv6优先于IPv4(可配置),用户留下响应缓慢的网站和数据库操作,只是因为连接到PHP中的IPv6地址被拒绝,并且连接被拒绝未正确处理,使得回退到IPv4变慢。需要mysql.connect_timeout秒

注意:来源似乎可信

此外,这是一个很好的阅读:http://dev.mysql.com/worklog/task/?id=798

  

应该支持MySQL支持IPv6工作   (“Internet协议版本6”)   这意味着:
   - 用户可以使用IPv6连接。 这部分是连接器问题<​​/ strong>    - 存储用户地址信息,例如,在mysql.user中,可以是IPv6格式的    - 建议的新数据类型CIDR和INET允许使用WL#2037“添加CIDR和INET数据类型”中描述的IPv6格式    - 像inet_ntoa()这样的函数需要修订

答案 1 :(得分:-1)

尝试将此用于您的PDO连接并查看它是否有效。

$dbh = new PDO('mysql:host=<ipv6-address>;port=<port>;dbname=<dbname>', <dbusername>, <dbpassword>);

如果失败,您可以更好地使用try...catch来准确查看错误

<?php
try {
    $dbh = new PDO('mysql:host=<ipv6-address>;port=<port>;dbname=<dbname>', <dbusername>, <dbpassword>);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>