我正在尝试使用我的PHP代码中的PDO模块连接到数据库。我已经阅读并搜索了类似的主题,但我无法弄清楚我做错了什么。请帮我解决这个问题。
Apache版本:Apache / 2.2.21(Win32)PHP / 5.3.10
,我没有注释掉这行:extension = php_mysql.dll
2a上。 phpinfo函数显示'Loaded Configuration File'位置为C:\ php \ php.ini
2B。 PDIN驱动程序信息由phpinfo函数显示: 在PDO部分:PDO驱动程序 - > Mysql(已启用) 在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();
}
我收到的错误消息:
编辑:添加了答案,要求提供更多信息,这些信息无疑将很快被删除:
您的常识: 谢谢你的代码片段。它帮助我解决了这个问题。看来charset可能是原因。这是我连接到db
的代码$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 />";
}
答案 0 :(得分:9)
看来你的服务器配置错误了
在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无用。无需调用此函数,您已经抛出错误
答案 1 :(得分:3)
以防万一其他人从谷歌到这里。我有完全相同的问题,并重新启动apache修复它。
答案 2 :(得分:2)
如果以上所有答案都无法解决您的问题,请尝试为您的DSN指定端口号:
$this->con = new PDO("mysql:host=localhost;port=3306;dbname=my_db","root","secret");
这里我使用3306,因为它是我的Mysql默认端口号。
答案 3 :(得分:0)
要做的第一件事是在配置文件中仔细检查连接参数
这看起来很明显,但由于我刚刚使用“正确的值”配置了我的Symfony项目的parameters.yml,我没有立即考虑它,并认为问题出在其他地方。
我的dbname错了!