警告:mysqli_connect():MySQL 服务器已消失

Posted

技术标签:

【中文标题】警告:mysqli_connect():MySQL 服务器已消失【英文标题】:Warning: mysqli_connect(): MySQL server has gone away 【发布时间】:2015-03-01 08:09:03 【问题描述】:

我写了一个简单的 php 代码来连接 mysql 服务器,如下所示

<?php

$username = "root";
$password = "Kepwd";
$hostname = "localhost:81";

//connection to the database
$dbhandle = mysqli_connect($hostname, $username, $password)
  or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";

但这会产生以下错误。我在 google 和 Stack Overflow 中发现了一些关于这个问题的主题。但这些对我没有帮助。

( ! ) Warning: mysqli_connect(): MySQL server has gone away in C:\wamp\www\SSDConsultingNew\inc\test.php on line 8
Call Stack
#   Time    Memory  Function    Location
1   0.0014  240936  main( )   ..\test.php:0
2   0.0014  241528  mysqli_connect ( )  ..\test.php:8

( ! ) Warning: mysqli_connect(): Error while reading greeting packet. PID=10612 in C:\wamp\www\SSDConsultingNew\inc\test.php on line 8
Call Stack
#   Time    Memory  Function    Location
1   0.0014  240936  main( )   ..\test.php:0
2   0.0014  241528  mysqli_connect ( )  ..\test.php:8

( ! ) Warning: mysqli_connect(): (HY000/2006): MySQL server has gone away in C:\wamp\www\SSDConsultingNew\inc\test.php on line 8
Call Stack
#   Time    Memory  Function    Location
1   0.0014  240936  main( )   ..\test.php:0
2   0.0014  241528  mysqli_connect ( )  ..\test.php:8
Unable to connect to MySQL

【问题讨论】:

您的主题行显示为“警告:mysql_connect():MySQL 服务器已消失”,其中包含 mysql_ 函数,而不是您问题中的其他内容,即 mysqli_ 函数.这是你得到的实际错误吗? 尝试不使用端口$hostname = "localhost"; - 您可能还有其他应用程序使用相同的端口。如果是这样,您将需要找出它是什么,或尝试端口 3306 您混淆了 IIS Web 服务器和 mysql 服务器。您需要通过外部 IIS 端口连接到本地主机以连接到 mysql 服务器做什么?您的 MySQL 端口在默认 3306 上运行,当您删除 localhost:81 时,它可以解析地址。 超级老问题,但我只是遇到了这个问题,并不是因为上述任何事情。我使用 MySQL Workbench 创建用户,并选择 SHA-256 作为密码而不是标准密码……这导致在尝试连接到数据库时抛出此错误。也许有人会发现这条评论很有用,因为我花了 4 个小时才弄清楚。 ¯_(ツ)_/¯ @AndrewQuebe 谢谢!我用头撞了几个小时,直到我找到你的评论。我不得不回去重新配置 MySQL 8 社区版,甚至允许“标准”密码,但这样做就成功了。 【参考方案1】:

错误在这里:

$hostname = "localhost:81";

您不是连接到 MySQL,而是连接到 Apache 服务器。如果您没有更改 MySQL 端口,请使用

$hostname = "localhost";

【讨论】:

是的,我们已经在 cmets 中建立了这一点。 Ohgodwhy 的评论对我来说很有意义。 @Fred-ii- 是的。并且端口必须作为单独的参数指定给 mysqi_connect,而不是与主机一起指定。 是的,也是。 $mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306); 根据php.net/manual/en/mysqli.quickstart.connections.php ;-)【参考方案2】:

输入数据库名称后忘记指定数据库名称重试。语法应该是这样的

<?php
$con = mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())

echo "Failed to connect to MySQL: " . mysqli_connect_error();

?>

【讨论】:

错了。数据库名称是可选的。

以上是关于警告:mysqli_connect():MySQL 服务器已消失的主要内容,如果未能解决你的问题,请参考以下文章

警告:mysqli_connect(): (28000/1045): 拒绝访问

警告:mysqli_connect(): (HY000/2002): 没有这样的文件或目录

PHP MySQL OpenSSL警告

警告:mysqli_connect():(HY000/2002):连接被拒绝[重复]

mysqli_connect(): (HY000/1045): Access denied for user ... - mysql shell 工作 [重复]

警告:mysqli_connect():(HY000/1045):用户'record'@'localhost'的访问被拒绝(使用密码:YES)[重复]