致命错误:PDOException SQLSTATE [28000] [1045]拒绝访问
我试图安装一个PHP应用程序,该应用程序编码了另一个不能联系的人,他使用了PDO。我遇到了很多问题来运行此代码。在someareas,MySQL的连接以及因为没有使用PDO(这表明用户名和密码是正确的),但在另一些引发此异常:致命错误:PDOException SQLSTATE [28000] [1045]拒绝访问
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'www-data'@'localhost' (using password: NO)' in /var/www/x/include/SPDO.php:14 Stack trace: #0 /var/www/x/include/SPDO.php(14): PDO->_construct('mysql:host=;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): Project->__construct() #4 {main} thrown in /var/www/x/include/SPDO.php on line 14
我不明白为什么试图寻找用户www-data。我查看了谷歌,发现了很多这个错误的问题,但是来自像Magento这样的CMS并没有什么能够帮助我。
- PHP版本:PHP 5.3.3-7
- PDO驱动为MySQL 49年5月1日
- 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的两个文件:
- SPDO.php:http://pastebin.com/utCjresv
- class_Config.php:http://pastebin.com/6CENLDf3
www数据是根据其正在执行PHP脚本的用户,我想这就是PDO在默认情况下,如果没有Uername使用提供用于连接到您的数据库。
您似乎已提供的代码无法从您使用的任何设置方法中找到用户名和密码,或者开发人员在正确调用PDO时未提供用户名和密码。
临时修正是编辑文件“/var/www/x/include/SPDO.php”。在第14行中,您将找到对PDO构造函数的调用。将第二个参数更改为您的用户名,将第三个参数更改为您的密码。
/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');
嘿,谢谢你的回复。我试图强制它,反正它失败了。我更新了2个pastebin文件,以显示它们如何加载配置变量等。 – udexter 2011-02-04 09:34:01