使用 PDO 连接 Mysql 数据库不起作用

Posted

技术标签:

【中文标题】使用 PDO 连接 Mysql 数据库不起作用【英文标题】:using PDO to connect Mysql database not working 【发布时间】:2013-01-29 21:59:06 【问题描述】:

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

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

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

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

    2b。 phpinfo函数显示的PDO驱动信息: 在 PDO 部分下:PDO 驱动程序-->Mysql(已启用) 在 PDO Driver for MySQL 部分下: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 失败:不知道这样的主机。在第 14 行的 C:\server\htdocs\html-exer\handle_reg3.php 中 警告:PDO::__construct() [pdo.--construct]: [2002] php_network_getaddresses: getaddrinfo 失败:不知道这样的主机。 (尝试通过 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 />";
 

【问题讨论】:

【参考方案1】:

您的服务器似乎配置错​​误 在 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 在连接到 localhost 时遇到问题。因此,您需要更改 PDO 连接字符串的地址。

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

另外,mysql_error() 对 PDO 毫无用处。不用调用这个函数,已经报错了

【讨论】:

您好,常识:感谢您的回复。您能具体说明一下解决方案吗?我使用 127.0.0.1/filename.php 执行文件,我收到相同的错误消息。【参考方案2】:

以防万一其他人从谷歌登陆这里。我遇到了完全相同的问题,重新启动 apache 解决了它。

【讨论】:

我在 magento 商店中收到此错误 - 由于服务器部署的一些问题,重新启动 aws ec2 实例等等.. apache 只需要重新启动。我现在已经了解到,当我停止并启动一个 ec2 实例时,我也应该重新启动 apache...【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于使用 PDO 连接 Mysql 数据库不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP MySql PDO 多次插入不起作用

为啥这种使用 PDO 计算 Mysql 行数的方法不起作用? [关闭]

PHP PDO MySQL可滚动游标不起作用

使用php pdo选择原始计数不起作用[重复]

MySQL PDO INSERT ... SELECT IF 语句不起作用

PHP PDO事务回滚不起作用