由于"双端口" PHP PDO初始化失败 - 未捕获的PDOException:SQLSTATE [HY000] [2002]

时间:2017-04-20 10:20:15

标签: php mysql pdo

我收到此错误

  

PHP致命错误:未捕获PDOException:SQLSTATE [HY000] [2002]无法解析地址" localhost:3306:3306"在[myPath] /xxDb.php:32

注意" double"地址中的端口: localhost:3306:3306

xxDb.php line 32看起来像这样:

$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PW, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ));

转储DB_HOST会导致localhost:3306

我无法看到第二个端口部分3306来自哪个显然存在于连接初始化期间。 任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

showdev的评论是正确的,PDO DSN不允许host:port语法。

如果您的CMS正在控制之外定义DB_HOST,则无法直接使用该常量。但你可以从中获取信息。

$host_port = preg_replace('/:(\d+)/', ';port=${1}', DB_HOST);
$db = new PDO("mysql:host={$host_port};dbname=".DB_NAME.";charset=utf8", 
    DB_USER, DB_PW, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));