我正在研究一本关于php/mysql开发的书中的例子。我正在开发linux/apache环境。
我已经建立了一个数据库和一个用户。我试图连接这一行代码:
$db_server = mysql_connect($db_hostname, $db_username, $db_password);我知道这个错误:
警告: mysql_connect() function.mysql- connect :无法连接到数据库的/var/www/host/dj/connect.php中用户'www-data'@'localhost‘(使用密码:是)的访问被拒绝:用户'www-data'@'localhost’被拒绝访问(使用密码:是)
我只能猜到这里发生了什么:我认为www-data是apache的用户名。在数据库连接上,传递给mysql的凭据不是我的数据库用户的凭据,而是apache自己的凭据。这就是这里发生的事吗?
如何传递我为用户定义的凭据?
编辑:顺便说一下,我在变量$db_hostname、$db_username、$db_password中有凭证。
它们由使用require_once的另一个文件传入。如果找不到那个文件,我就会得到一个错误。因此,我知道我的用户名和密码正在被我的脚本所使用。
我的两个脚本都可以在这里看到:http://pastebin.com/MUneLEib
已解决:
谢谢你们。
你们中有几个人指出了我的粗心。
另外,我对Neo的回答感到特别高兴:他告诉我为什么要使用apache进程所有者的用户名。
:)
发布于 2010-04-05 04:49:46
我刚看了你的密码!具有用户名的变量是$database_username,但您使用的是$db_username。将代码更改为:
$db_server = mysql_connect($db_hostname, $database_username, $db_password);
或者用用户名更改行:$db_ username =‘you user’;//或您创建的用户名
当您没有传递任何内容时,它将是用户mysql假设的,但是它不会得到密码,所以如果您没有定义$db_password,它会说:(使用密码:否)
您与您的用户一起设置了$database_username,但是您传递的是未设置的$db_username,因此当mysql用户的密码没有任何传递时,用户就是默认的linux!由于没有具有该密码或特权的mysql用户,甚至没有这个名称,所以您没有访问权限!
该用户是www-data,正如您所猜的那样,apache用户被分配给客户端请求!
发布于 2010-04-05 04:52:38
在login.php中使用变量$database_username,但在连接函数中使用$db_username。试着把它们匹配起来。
发布于 2010-04-05 03:15:41
用户名进入$db_username,密码进入$db_password。
https://stackoverflow.com/questions/2576754
复制相似问题