8

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

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

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

    2a. phpinfo 函数显示“加载的配置文件”位置是 C:\php\php.ini

    2b。phpinfo 函数显示的 PDO 驱动程序信息:在 PDO 部分下:PDO 驱动程序-->Mysql (enabled) 在 PDO Driver for MySQL 部分下:客户端 API 版本-->mysqlnd 5.0.8-dev - 20102224 - $Revision: 321634 $ (启用)

我用来连接数据库的代码

$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 failed: 没有这样的主机是已知的。在第 14 行的 C:\server\htdocs\html-exer\handle_reg3.php
  • 警告:PDO::__construct() [pdo.--construct]: [2002] php_network_getaddresses: getaddrinfo failed: 没有这样的主机是已知的。(尝试通过 tcp://locahost:3306 连接)在第 14 行的 C:\server\htdocs\html-exer\handle_reg3.php
  • 致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No such host is known。' 在 C:\server\htdocs\html-exer\handle_reg3.php:14 堆栈跟踪:#0 C:\server\htdocs\html-exer\handle_reg3.php(14): PDO->__construct('mysql:host =loca...', 'root', 'password') #1 {main} 在第 14 行的 C:\server\htdocs\html-exer\handle_reg3.php 中抛出

编辑:添加了答案,要求提供更多信息,这些信息无疑将很快被删除:

您好您的常识:感谢您的代码片段。它帮助我解决了这个问题。看来字符集可能是原因。这是我连接到数据库的代码

$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

4 回答 4

10

看来您的服务器只是配置错误,而不是在 DSN 中
使用。127.0.0.1localhost

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

您需要阅读错误消息。
它说您的 PDO 在连接到 localhost 时遇到问题。因此,您需要更改 PDO 连接字符串的地址。

另外你使用了错误的字符集名称,我已经更正了

此外,mysql_error()对 PDO 也没用。不需要调用这个函数,你已经抛出了一个错误

于 2013-02-14T06:38:11.343 回答
3

以防万一其他人从谷歌登陆这里。我有完全相同的问题并重新启动apache修复了它。

于 2015-02-09T11:15:19.407 回答
2

如果以上所有答案都不能解决您的问题,请尝试为您的 DSN 指定端口号:

$this->con = new PDO("mysql:host=localhost;port=3306;dbname=my_db","root","secret");

这里我使用了 3306,因为它是 Mysql 的默认端口号。

于 2015-03-16T18:27:12.270 回答
0

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

这似乎很明显,但由于我刚刚使用“正确的值”配置了 Symfony 项目的 parameters.yml,所以我没有立即考虑,并认为问题出在其他地方。
我的数据库名是错误的!

于 2016-12-15T10:31:34.213 回答