致命错误:PDOException SQLSTATE [28000] [1045]访问被拒绝

时间:2011-02-04 09:10:52

标签: php pdo

我正在尝试安装一个PHP应用程序,编写另一个我无法联系的人,他使用PDO。运行此代码我遇到了很多问题。在某些地区,MySQL连接得很好,因为没有使用PDO(这表明用户名和密码是正确的),但在其他情况下,它会抛出此异常:

  

致命错误:未捕获的异常   带有消息的'PDOException'   'SQLSTATE [28000] [1045]访问被拒绝   对于用户'www-data'@'localhost'(使用   密码:NO)'in   /var/www/x/include/SPDO.php:14   堆栈跟踪:#0   /var/www/x/include/SPDO.php(14):   PDO-> _ 构建体( 'MySQL的:主机=; DBN ...',   NULL,NULL)#1   /var/www/x/include/SPDO.php(22):   SPDO-> _construct()#2   /var/www/x/include/class_Projecte.php(55):   SPDO :: singleton()#3   /var/www/x/dades_proj_edit.php(116):   项目 - > __ construct()#4 {main}   投入   /var/www/x/include/SPDO.php在线   14

我不明白为什么要试着查看用户 www-data 。我查看了谷歌并发现了很多这个错误的问题,但是来自像Magento这样的CMS,没有什么可以帮助我。

  • PHP版本:PHP 5.3.3-7
  • 用于MySQL的PDO驱动程序5.1.49
  • Apache版本:Apache / 2.2.16(Debian)
  • Apache模块:核心mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_setenvif mod_status

提前谢谢!

更新

这是用于连接PDO的两个文件:

2 个答案:

答案 0 :(得分:7)

www-data是执行PHP脚本的用户,我想如果没有为连接数据库提供Uername,PDO将默认使用它。

您提供的代码似乎无法从您使用的任何设置方法中找到用户名和密码,或者开发人员在正确调用PDO时未提供用户名和密码。

临时修复是编辑文件“/var/www/x/include/SPDO.php”。在第14行,您将找到对PDO构造函数的调用。将第二个参数更改为您的用户名,将第三个参数更改为您的密码。

答案 1 :(得分:2)

/var/www/x/include/SPDO.php(14):PDO-> _construct('mysql:host =; dbn ...',NULL,NULL) 第二个和第三个参数应该是DB的用户名和密码而不是NULL

我检查了你的文件,我发现错过(或不包括)配置的实例化 - 用户名,密码,主机等。

在实例化PDO对象之前,您应该使用以下代码:

$config = Config::singleton();
$config->set('dbhost', 'your_hostname'); //probably localhost
$config->set('dbname', 'your_database_name'); 
$config->set('dbuser', 'db_username'); 
$config->set('dbpass', 'db_user_password');