使用 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 数据库不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥这种使用 PDO 计算 Mysql 行数的方法不起作用? [关闭]