由于“双端口",PHP PDO初始化失败. -未捕获的PDOException:SQLSTATE [HY000] [2002] [英] PHP PDO initialization fails due to "double port" - Uncaught PDOException: SQLSTATE[HY000] [2002]

查看:259
本文介绍了由于“双端口",PHP PDO初始化失败. -未捕获的PDOException:SQLSTATE [HY000] [2002]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到此错误

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

PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Failed to parse address "localhost:3306:3306" in [myPath]/xxDb.php:32

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

Notice the "double" port in the address: localhost:3306:3306

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

xxDb.php line 32 looks like this:

$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.

dumping DB_HOST results in localhost:3306.

在连接初始化期间,我看不到第二个端口部分3306明显来自何处. 任何帮助都将受到高度赞赏.

I can not see where the second port part 3306 comes from which obviously exists during the connection initialization. Any help is highly appreciated.

推荐答案

showdev的评论正确,即PDO DSN不允许使用host:port语法.

showdev's comment is correct that the PDO DSN does not allow host:port syntax.

如果CMS在控件之外定义DB_HOST,则不能直接使用该常量.但是您可以从中提取信息.

If your CMS is defining DB_HOST outside of your control, you can't use that constant directly. But you can pull information out of it.

$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"));

这篇关于由于“双端口",PHP PDO初始化失败. -未捕获的PDOException:SQLSTATE [HY000] [2002]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆