从PHP连接到MySQL时出现问题

从PHP连接到MySQL时出现问题,php,mysql,Php,Mysql,我创建了一个名为database\u 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";

我创建了一个名为
database\u 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();
}
?>

主机名是不是除了
localhost
127.0.0.1
之外的任何东西?如果是这样,那么这就是防火墙问题

要检查主机是否远程可用,可以使用
nmap
是一种常见的网络实用程序,默认情况下不会安装在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
但如果它关闭了,它将是:

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
此外,通过运行以下命令,您还可以检查您的用户john在MySQL数据库服务器上的权限:

SHOW GRANTS FOR 'john'@'127.0.0.1';
或者像这样使用
localhost
而不是IP地址

SHOW GRANTS FOR 'john'@'localhost';
虽然您的屏幕截图显示您已授予特权,但您需要确保他们确实获得了特权。在MySQL中,您可以通过设置
GRANT
然后运行
FLUSH特权来实现这一点


过去,我所看到的是一些MySQL设置不考虑<代码> 127.0.0.1和<代码> LoalHOST < /Cord>,即使它们是相同的。因此,我建议将主机名更改为

127.0.0.1
localhost
,看看会发生什么。

您需要从host: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可以拥有所有特权,否则您可以根据需要逐个添加这些特权。

主机名是类似127.0.0的ip地址。1@user3557909伟大的现在看我编辑的答案。尝试使用
localhost
而不是
127.0.0.1
,并检查用户授权。他们按照屏幕截图所示添加了授权。是,但不是来自正确的主机,我猜是主机。是,我不知道
HOST
localhost
,这就是为什么我建议使用
nmap
,并为用户检查
GRANTS
。请再次阅读。“是的,我不知道
HOST
localhost
,这就是为什么我建议使用
nmap
以及为用户检查
授权的原因。”