PDO连接MySQL报错2005:未知服务器主机'127.0.0.1:3306'求助
解决PDO连接MySQL时的"Unknown MySQL server host"错误
嘿,我一眼就看出问题所在了——这个报错是因为你在PDO的DSN连接字符串里,把主机地址和端口的写法搞错了。不是直接把端口拼在IP后面,而是得用单独的;port=参数来指定端口。
先看你出错的核心代码段:
$dbh = new PDO('mysql:host='.$db['host'].':'.$db['port'].';dbname='.$db['db'].'', $db['user'], $db['pass']);
这里你把127.0.0.1和3306拼成了127.0.0.1:3306作为host的值,PDO会把整个字符串当作主机名去解析,自然找不到对应的MySQL服务器,所以抛出了Unknown MySQL server host的错误。
修正后的完整代码
把端口从host字段里分离出来,用标准的port参数单独指定:
error_reporting(E_ALL); ini_set('display_errors', 1); /* Database Setting */ $db['host'] = '127.0.0.1'; //Mysql's Host $db['port'] = '3306'; //Mysql's port $db['user'] = "root"; //Mysql's user $db['pass'] = 'pass'; //Mysql's password $db['db'] = "db"; //Mysql's database // 正确的DSN写法:用;port=单独指定端口 $dbh = new PDO( 'mysql:host='.$db['host'].';port='.$db['port'].';dbname='.$db['db'], $db['user'], $db['pass'] );
补充说明
你提到用localhost时没出这个错,是因为当使用localhost作为主机名时,MySQL客户端默认会用套接字(socket)方式连接,而非TCP/IP,所以即使端口写法有误也不会触发这个错误;但用127.0.0.1会强制走TCP/IP连接,端口写法的问题就立刻暴露了。另外也可以确认下你的MySQL服务确实在3306端口运行,本地防火墙没有阻止这个端口的TCP连接。
内容的提问来源于stack exchange,提问作者Aaron Jonk
相关产品推荐
相关产品推荐

