从PHP连接到MySQL的问题

时间:2014-05-16 22:45:51

标签: php mysql

我创建了一个名为database_test&的数据库。我有一个名为john的用户和一个密码hello123。这全部来自主持人HOST

<?php
// Create connection
$host = "HOST"; // THIS HOST IS CORRECT. I'M JUST HIDING IT FROM GENERAL PUBLIC.
$user = "john";
$password = "hello123";
$database =  "database_test";

$con=mysqli_connect($host,$user,$password,$database);

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>

然而,我收到错误:

  

无法连接到MySQL:用户'john'@'HOST'拒绝访问   (使用密码:是)

我已经为用户“john”设置了权限,如下所示......

enter image description here

为什么我收到此错误?我有正确的主机,用户名和密码正确,但它说这个用户没有权限

2 个答案:

答案 0 :(得分:0)

主机名是localhost还是127.0.0.1以外的其他名称?如果是这样,那么这就是防火墙问题。

要检查主机是否可远程访问,您可以使用mmapnmap是一个常见的网络实用程序,默认情况下不安装在Linux计算机或Mac OS X计算机上,但可以轻松安装和安装。从命令行运行。

只需从要用于连接远程主机的代码的服务器运行nmap,如下所示:

nmap [hostname or IP address] -p 3306

端口3306是MySQL端口,如果该端口打开,则输出为:

Starting Nmap 5.21 ( http://nmap.org ) at 2014-05-16 18:56 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
PORT     STATE SERVICE
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.40 seconds

但如果关闭,那就是:

Starting Nmap 6.25 ( http://nmap.org ) at 2014-05-16 18:57 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000096s latency).
PORT     STATE  SERVICE
3306/tcp closed mysql

Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds

此外,您可以通过运行此命令来检查MySQL数据库服务器本身的GRANTS用户john

SHOW GRANTS FOR 'john'@'127.0.0.1';

或者使用localhost代替IP地址;

SHOW GRANTS FOR 'john'@'localhost';

虽然您的屏幕截图显示您已授予权限,但您需要确保它们确实已获得权限。在MySQL中,您可以通过设置GRANT然后运行FLUSH PRIVILEGES;

来完成此操作

过去,我所看到的是一些MySQL设置不认为127.0.0.1localhost是相同的,即使它们是相同的。因此,我建议您将主机名更改为127.0.0.1localhost,看看会发生什么。

答案 1 :(得分:-1)

您需要从主机向用户添加权限:HOST,执行这些查询:

GRANT USAGE ON database_test.* TO 'john'@'HOST' IDENTIIFIED BY 'hello123';
GRANT ALL PRIVILEGES ON database_test.* TO 'john'@'HOST' IDENTIFIED BY 'hello123';
FLUSH PRIVILEGES;

PS:我授予了所有权限,因为您的帖子显示john可以拥有所有权限,否则您可以根据需要逐个添加权限。