PHP & PDO : Connect to MySQL using IPv6 address

标签 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] No route to host

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

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

任何帮助将不胜感激。

谢谢

最佳答案

以防其他人遇到同样的问题,并为他们节省 2 小时钻研 PHP 源代码的时间,如果您将地址放在方括号中,PDO MySQL IPv6 连接就可以正常工作。

参见:https://github.com/php/php-src/blob/master/main/streams/xp_socket.c#L568

例如

$pdo = new PDO("mysql:host=[1234:5678::42];port=3306;dbname=foo", ...);

关于PHP & PDO : Connect to MySQL using IPv6 address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30398160/

相关文章:

php - 错误 : "Input is not proper UTF-8, indicate encoding !" using PHP's simplexml_load_string

php - 空选择字段表单值留下不需要的空白

mysql - 我们可以在使用 sequelize js Node 在 mysql 表中插入数据后给时间吗

mysql - 在 MySQL 的重负载下插入/删除行需要几秒钟

mysql - 返回出现多次的所有记录

php - PDO session 存储

php - PHP 不总是一种服务器端技术吗?

javascript - 获取 php 错误、警告、通知并使用 javascript 提醒他们

MySQL 多个Where 子句使用一张表

php - 如何在php中使用PDO transactino插入后获取插入ID