使用PDO连接Mysql数据库无法工作

8

我正在尝试在我的PHP代码中使用PDO模块连接数据库。我已经阅读并搜索了类似的话题,但我无法弄清楚我做错了什么。请帮我解决这个问题。

  1. Apache版本:Apache/2.2.21(Win32)PHP/5.3.10

  2. 在php.ini文件中,我取消注释了以下行:extension=php_mysql.dll

    2a.phpinfo函数显示“Loaded Configuration File”位置为C:\php\php.ini

    2b.PDO驱动程序信息由phpinfo函数显示: 在PDO部分下:PDO drivers-->Mysql (enabled) 在针对MySQL的PDO驱动程序部分下:client API version-->mysqlnd 5.0.8-dev - 20102224 - $Revision: 321634 $ (enabled)

我用于连接到数据库的代码:

$db_user = "uid";
$db_pass = "pd";

$db_connect = new PDO('mysql:host=locahost; dbname=practice; charset=UTF-8', $db_user, $db_pass);
if($db_connect){
    print "connected to the db " . "<br />";
} else{
    print "error connects to the db. " . mysql_error();
}

我收到的错误消息:
警告:PDO::__construct() [pdo.--construct]:php_network_getaddresses:getaddrinfo失败:没有这样的主机。位于C:\server\htdocs\html-exer\handle_reg3.php的第14行
警告:PDO::__construct() [pdo.--construct]:[2002] php_network_getaddresses: getaddrinfo失败:没有这样的主机。(尝试通过tcp://locahost:3306连接) 位于C:\server\htdocs\html-exer\handle_reg3.php的第14行
致命错误:Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No such host is known. ' in C:\server\htdocs\html-exer\handle_reg3.php:14 Stack trace: #0 C:\server\htdocs\html-exer\handle_reg3.php(14): PDO->__construct('mysql:host=loca...', 'root', 'password') #1 {main} thrown in C:\server\htdocs\html-exer\handle_reg3.php on line 14
编辑:添加了一个问题,请求进一步的信息,这无疑很快就会被删除:
你好,Your Common Sense: 感谢代码片段。它帮助我解决了问题。看起来字符集可能是原因。这是我的连接到数据库的代码。
$dsn= 'mysql:host=localhost; dbname=practice; charset=utf8';
$db_user = "root";
$db_pass = "mypd";

 $db_connect = new PDO($dsn, $db_user, $db_pass);
 if($db_connect){
     print "connected to the db " . "<br />";
 }
4个回答

10

看起来你的服务器配置出错了
在 DSN 中使用 127.0.0.1 替代 localhost

$dsn = 'mysql:host=127.0.0.1; dbname=practice; charset=utf8';
$pdo = new PDO($dsn, $db_user, $db_pass, $opt);

您需要阅读错误消息。
它表示您的PDO连接到本地主机存在问题。因此,您需要更改PDO连接字符串的地址。

另外,您使用了错误的字符集名称,我已经进行了更正。

还有,mysql_error()与PDO无关,调用此函数没有任何意义,因为您已经抛出了一个错误。


你好,常识:感谢回复。您能具体说明解决方案吗?我使用127.0.0.1/filename.php来执行文件,但是收到了相同的错误信息。 - user2061466

3

如果有其他人从谷歌搜索到这里,我想说我也曾经遇到过同样的问题,重启Apache服务器解决了它。


我在一个Magento商店上遇到了这个错误 - 由于服务器部署的一些问题,重新启动AWS EC2实例等等... Apache只需要重新启动即可。现在我已经通过艰苦的方式学会了,当我停止和启动EC2实例时,我应该同时重启Apache... - asherrard

2
如果以上所有答案都不能解决您的问题,请尝试为您的DSN指定端口号:
$this->con = new PDO("mysql:host=localhost;port=3306;dbname=my_db","root","secret");

我使用了3306作为我的默认Mysql端口号。


0

首先要做的是在配置文件中仔细检查连接参数。

这可能看起来很明显,但由于我刚刚使用“正确的值”配置了我的Symfony项目的parameters.yml,所以我没有立即考虑到它,并认为问题出在其他地方。
我的dbname只是错误的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接