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

PHP&;PDO:使用IPv6地址连接到MySQL,php,mysql,pdo,ipv6,Php,Mysql,Pdo,Ipv6,我想使用一个远程MySQL实例的IPv6地址连接到它(一个Google Cloud SQL实例) 我是这样使用PHP PDO的: $db = new \PDO('mysql:host=<ipv6-address>;port=3306;dbname=<database-name>', '<username>', '<password>' ); $db=new\PDO('mysql:host=;port=3306;dbname=', '',

我想使用一个远程MySQL实例的IPv6地址连接到它(一个Google Cloud SQL实例)

我是这样使用PHP PDO的:

$db = new \PDO('mysql:host=<ipv6-address>;port=3306;dbname=<database-name>',
  '<username>',
  '<password>'
);
$db=new\PDO('mysql:host=;port=3306;dbname=',
'',
''
);
但它总是失败,并显示以下异常消息:

PDOException:SQLSTATE[HY000][2002]没有到主机的路由

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

mysql --host=<ipv6-address> --user=<username> --<password>
mysql--host=--user=--
任何帮助都将不胜感激


谢谢

尝试将此用于您的PDO会议,看看是否有效

$dbh = new PDO('mysql:host=<ipv6-address>;port=<port>;dbname=<dbname>', <dbusername>, <dbpassword>);
阅读此文可得出以下想法:

通常情况下,IPv6优先于IPv4(可配置),用户只能使用响应速度较慢的网站和数据库操作,这只是因为在PHP中拒绝连接到IPv6地址,并且拒绝的连接没有得到正确处理,这使得回退到IPv4的速度较慢。需要mysql.connect\u超时秒

注:来源似乎确实可信

此外,这是一本很好的读物:

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


如果其他人遇到同样的问题,为了节省他们2个小时的时间钻研PHP源代码,如果在地址周围放上方括号,PDO MySQL IPv6连接就可以工作

见:

e、 g


对不起,我看不出你的代码和我的代码有什么不同?我已经粘贴了异常错误消息。感谢您的帮助。您是否尝试过在代码中不使用
端口进行连接,以防另一个端口被配置为侦听数据库连接?请尝试使用本机
mysql
进行连接,看看会发生什么。如果它连接,那么你应该测试你的服务器是否支持或安装了
PDO扩展。此外,还有其他PHP组件似乎支持类似ipv6的套接字。显然,问题是在PHP mysql连接器中本地化的。。。很抱歉,这是个坏消息。要么你没有IPv6,要么连接已防火墙。如果是这样,我将无法从命令行进行连接。@JohannFradj你解决了问题吗?@JonasGröger自从发布此问题以来,我没有进行任何测试或进展。从我上次的理解来看,这是一个PHP连接器问题。如果你发现了什么,别忘了和我们分享;-)
<?php
try {
    $dbh = new PDO('mysql:host=<ipv6-address>;port=<port>;dbname=<dbname>', <dbusername>, <dbpassword>);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>
$pdo = new PDO("mysql:host=[1234:5678::42];port=3306;dbname=foo", ...);