如何从php连接到mysql?

时间:2010-04-05 03:13:22

标签: php mysql linux apache ubuntu

我正在研究一本关于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进程所有者的用户名。

:)

10 个答案:

答案 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或使用cPanelWebmin等界面;我已经使用了这两种方法,它们都有简单的界面来添加新的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及更高版本中被折旧和删除。 另一种方法是使用PDOMySQLi。 下面是使用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();
  }

?>