从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
以及为用户检查授权的原因。”