繁体   English   中英

如何从php连接到mysql?

[英]How do I connect to mysql from php?

我正在研究有关php / mysql开发的书中的示例。 我正在linux / apache环境中工作。

我已经建立了一个数据库和一个用户。 我尝试连接以下代码行:

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

我收到此错误:

警告:mysql_connect()[function.mysql-connect]:在第3行的/var/www/hosts/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进程所有者的用户名。

:)

我只是看了你的代码! 用户名变量为$ database_username,但是您使用的是$ db_username。将代码更改为:

$db_server = mysql_connect($db_hostname, $database_username, $db_password);

或者您可以使用$ db_username ='[您的mysql用户]'; //或您创建的用户名更改用户名行

当您不传递任何内容时,它将是mysql假定的用户,但不会获得密码,因此,如果您未定义$ db_password,它将显示:(使用password:NO)

您为用户设置了$ database_username,但是您传递的$ db_username未被设置,因此当没有使用mysql用户的密码传递任何内容时,该用户是默认的linux用户名! 由于没有mysql用户使用该密码或特权,甚至没有该名称,您都没有访问权限!

该用户是www-data,正如您猜到的,该用户是分配给客户端请求的apache用户!

login.php ,使用变量$database_username ,但在连接函数中,使用$db_username 尝试匹配它们。

用户名进入$db_username ,密码进入$db_password

<?php
$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
?>

所有这些其他答案都太冒昧了,好像您不知道$ db_username表示数据库用户名和密码一样。

该错误表明您已指定用户名和密码。 您刚刚指定了错误的。 您需要使用MySQL的用户名和密码,而不是系统的用户名/密码组合,所以不,这将不是www-data。 这可能是root用户和一些密码,但是同样,这些凭据是在MySQL中指定的,并且(不一定)与系统用户和密码相同。

您的MySQL安装应具有一个具有默认密码的root用户(您应立即更改)。 有几个选项:您可以通过MySQL命令行添加用户,或者如果提供程序具有类似的内容,则可以使用cPanelWebmin之类的界面; 我都使用了这两种方法,它们都有易于使用的界面来添加新的MySQL用户并为其分配权限。

只是一个提示:我通常为每个数据库创建一个用户,并赋予该用户对数据库的全部特权,然后将该用户与链接到数据库的应用程序一起使用。

然后,当然,一旦创建了MySQL用户帐户并将其授予Web应用程序数据库的特权,就可以在脚本中填写该用户名和密码。

在尝试连接之前,请确保为这些变量实际分配了数据库登录用户名和密码。 例如,在带有mysql_connect()的行之前:

$db_username = 'myuser';
$db_password = 'mypass123';

我建议您先尝试一下有关MySQL和PHP的教程,然后再尝试做进一步的准备-以便您了解它们的工作原理。

试试这个: http : //www.tizag.com/mysqlTutorial/mysqlconnection.php

另外,文档是您的朋友: http : //php.net/manual/zh/function.mysql-connect.php

给出的错误可能意味着尚未授予特权,或者密码可能不正确。 检查是否已创建用户并授予访问权限,或者只是发出此命令以确保将其设置为允许在mysql服务器上进行访问。

$ mysql -u root -p
password:

(等等等等来自服务器)

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

您的代码是正确的,也就是说您的密码不正确,因此您的mysql数据库拒绝了mysql连接。 如果您使用的是xampp,请使用:

本地主机

作为主机名和

作为用户名&在xampp中没有密码,所以它将是

$password = ""; 然后$dblink = new mysqli($hostname, $dbuser, $password, $dbname);

所以你可以这样设置你的var

<?php

    $hostname = "localhost";
    $dbuser = "root";
    $password = ""; // means there is no password to the database
    $dbname = "test"

?>

结论:

如果您将其作为消息-

警告:mysql_connect()[function.mysql-connect]:在第3行的/var/www/hosts/dj/connect.php中,对用户'www-data'@'localhost'的访问被拒绝(使用密码:是)连接到数据库:用户'www-data'@'localhost'的访问被拒绝(使用密码:是)

这表示您输入的密码错误或没有密码。

停止使用mysql_connect()

应该使用这种或其他有关的相关功能这个扩展。

在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();
  }

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM