我正在研究一本关于php / mysql开发的书中的例子。 我正在开发一个linux / apache环境。
我已经建立了一个数据库和一个用户。我尝试连接这行代码:
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
我收到此错误:
警告:mysql_connect() [function.mysql-connect]:访问 拒绝用户'www-data'@'localhost' (使用密码:YES)in /var/www/hosts/dj/connect.php在线 3无法连接到数据库: 用户拒绝访问 'www-data'@'localhost'(使用 密码:是)
我只能猜到这里发生了什么: 我认为www-data是apache的用户名。在数据库连接时,传递给mysql的凭据不是我的数据库用户的凭据,而是apache自己的凭据。这就是这里发生的事情吗?
如何传递我为用户定义的凭据?
编辑: 顺便说一下 - 我确实在变量$ db_hostname,$ db_username,$ db_password中有凭据。
使用require_once将它们传入另一个文件。如果找不到该文件,那么我收到错误。所以,我知道我的脚本正在使用我的用户名和密码。
我的脚本都可以在这里看到: http://pastebin.com/MUneLEib
#解决:
谢谢你们。
你们中的一些人指出我编写了粗心的代码。
此外,我对Neo的回答感到特别高兴:他告诉我为什么使用apache进程所有者的用户名。
:)
答案 0 :(得分:3)
我只看了你的代码!带有用户名的变量是$ database_username但是 您正在使用$ db_username ..将您的代码更改为:
$db_server = mysql_connect($db_hostname, $database_username, $db_password);
或者您可以使用用户名更改行: $ db_username ='[你的mysql用户]'; //或你创建的用户名
当你没有传递任何东西时,它将是用户mysql假定但它不会获得密码所以如果你没有定义$ db_password它会说:(使用密码:NO)
你用你的用户设置了$ database_username,但是你传递了$ db_username,这是没有设置的,所以当用户没有通过mysql用户的密码传递任何东西时,用户就是linux用户名!由于没有具有该密码或特权的mysql用户,或者甚至没有该名称,因此您无权访问!
该用户是www-data,正如您猜测apache用户被分配给客户端请求一样!
答案 1 :(得分:3)
在login.php
中,您使用变量$database_username
,但在连接函数中使用$db_username
。尝试匹配它们。
答案 2 :(得分:1)
用户名进入$db_username
,密码进入$db_password
。
答案 3 :(得分:1)
<?php
$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
?>
答案 4 :(得分:1)
所有这些其他答案都是如此放肆,好像你不知道$ db_username表示数据库用户名和密码相同。
错误表明您已指定用户名和密码。你只是指定了错误的。您需要使用MySQL的用户名和密码,而不是系统用户名/密码组合,所以不,这不是www-data。这可能是root和一些密码,但同样,这些凭据在MySQL中指定,并且(必然)与系统用户和密码不同。
您的MySQL安装应该有root用户使用默认密码(您应该立即更改)。有几种选择:如果您的提供商有类似的内容,您可以add an user via the MySQL command line或使用cPanel或Webmin等界面;我已经使用了这两种方法,它们都有简单的界面来添加新的MySQL用户并为他们分配权限。
也只是一个提示:我通常为每个数据库创建一个用户,并为用户提供数据库的完全权限,然后将该用户与链接到数据库的应用程序一起使用。
然后,当然,一旦您创建了一个MySQL用户帐户并在其Web应用程序的数据库上授予其权限,请在您的脚本中填写该用户名和密码。
答案 5 :(得分:0)
在尝试连接之前,请确保实际为这些变量分配了数据库登录用户名和密码。例如,在使用mysql_connect()的行之前:
$db_username = 'myuser';
$db_password = 'mypass123';
答案 6 :(得分:0)
我建议你在尝试进一步学习之前先阅读有关MySQL和PHP的教程 - 这样你才能理解它是如何工作的。
试试这个: http://www.tizag.com/mysqlTutorial/mysqlconnection.php
另外,文档是你的朋友: http://php.net/manual/en/function.mysql-connect.php
答案 7 :(得分:0)
给出的错误可能意味着未授予权限,或者密码可能不正确。检查用户是否已创建并被授予访问权限,或者只是发出此命令以确保它设置为允许访问mysql服务器。
$ mysql -u root -p
password:
(ph blah blah blah from server)
GRANT ALL PRIVILEGES ON db_base.* TO 'db username'@'localhost' IDENTIFIED BY 'some password';
如果所有权限都太多,请考虑只提供所需的基本权限:
GRANT SELECT,UPDATE,DELETE ON db_base.* TO 'db username'@'localhost' IDENTIFIED BY 'some password';
顺便说一句,服务器对此语句成功的响应是查询正常,0行受影响。
答案 8 :(得分:0)
你的代码是正确的,它说你的密码不正确所以你的mysql数据库拒绝mysql连接。如果您正在使用xampp:
本地主机
作为主机名&amp;
根
作为用户名&amp;在xampp中没有密码所以它将是
$password = "";
然后$dblink = new mysqli($hostname, $dbuser, $password, $dbname);
所以你可以像这样设置你的vars
<?php
$hostname = "localhost";
$dbuser = "root";
$password = ""; // means there is no password to the database
$dbname = "test"
?>
结论:
如果你把它作为你的信息 -
警告:mysql_connect()[function.mysql-connect]:拒绝访问用户&#39; www-data&#39; @&#39; localhost&#39;在第3行的/var/www/hosts/dj/connect.php中使用密码:YES(无法连接到数据库):用户访问被拒绝&#39; www-data&#39; @&#39; localhost&#39 ; (使用密码:是)
这表示您输入的密码错误或没有密码。
答案 9 :(得分:0)
mysql_connect()
!您应不使用与this扩展名相关的此功能或其他相关功能。
它在PHP 7.0.0及更高版本中被折旧和删除。 另一种方法是使用PDO或MySQLi。 下面是使用PDO连接MySQL的示例脚本:
<?php
/* Connect to a MySQL database using driver invocation */
/* DSN options:
http://php.net/manual/en/ref.pdo-mysql.connection.php
Error handling options:
http://php.net/manual/en/pdo.error-handling.php
Learn how to secure against SQL injection attacks:
http://php.net/manual/en/pdo.prepared-statements.php
*/
$user = 'myusername';
$pass = 'mypassword';
$host = 'localhost';
$mydb = 'mydatabase';
$dsn = "mysql:dbname=$mydb;host=$host";
try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>