Mysql 服务器已经消失。读取问候包时出错

Mysql server has gone away. Error while reading greeting packet

连接到 MySql 时出现错误 MySql server has gone away

这一行$db = mysqli_connect("localhost:9080","root","XXXX");

这是我的代码。

<?php
  ini_set('mysql.connect_timeout', 300);
  ini_set('default_socket_timeout', 300);

  define('DB_SERVER', 'localhost:9080');
  define('DB_USERNAME', 'root');
  define('DB_PASSWORD', '');
  define('DB_DATABASE', 'api');

   //$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD);
   $db = mysqli_connect("localhost:9080","root","");

  // Check connection
  if (!$db) 
  {
    die("Connection failed: " . mysqli_connect_error());
  }

  $select_db = mysqli_select_db($connection, DB_DATABASE);
  if(!$select_db)
  {
    die("Database selection failed: " . mysqli_error($db));
  }

  echo "Connected successfully";
?>

我试过添加

ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);

并将 max_allowed_Packet 更新为 16 M。

然后重新启动所有服务。

错误截图:http://imgur.com/a/2B4Rg

您与数据库的连接将连接 handle/object 保存在一个名为 $db 的变量中,但您尝试 select 数据库使用尝试使用一个名为 [=16= 的变量] 所以它只是一个 copy/paste 错字真的。

<?php

define('DB_SERVER', 'localhost:9080');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'api');

$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD);

// Check connection
if (!$db) {
    die("Connection failed: " . mysqli_connect_error());
}

//$select_db = mysqli_select_db($connection, DB_DATABASE);
//               the error      ^^^^^^^^^^^
$select_db = mysqli_select_db($db, DB_DATABASE);
if(!$select_db) {
    die("Database selection failed: " . mysqli_error($db));
}

echo "Connected successfully";
?>

小记

您可以像这样使用第 4 个参数在 mysql_connect() 函数中完成连接和数据库 selection。

MySQL 中的 mysqli_db_select() 函数确实适用于当您希望在脚本的正常流程中的某个时刻 select 不同的数据库时,而不是在以下情况下使用最初连接到数据库。

<?php

define('DB_SERVER', 'localhost:9080');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'api');

$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

// Check connection
if (!$db) {
    die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully";
?>

来自下面的评论......

默认情况下 MySQL 在 WAMPServer 端口 3306 上运行,MariaDB 在 WAMPServer 中的 3307 上运行。

所以改变

define('DB_SERVER', 'localhost:9080');

define('DB_SERVER', 'localhost:3306');  // default MYSQL

define('DB_SERVER', 'localhost:3307');  // default MariaDB

You can also now remove the

ini_set('mysql.connect_timeout', 300);

ini_set('default_socket_timeout', 300);

and revert the max_allowed_Packet back to its default