【问题标题】:Mysql server has gone away. Error while reading greeting packetmysql服务器已经消失了。读取问候包时出错
【发布时间】:2017-07-10 12:29:11
【问题描述】:

在连接到 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

【问题讨论】:

  • $connection 在您的代码中未定义!!
  • 你的 MySQL 服务器是否真的在监听 9080 端口?如果是,为什么?
  • 还可以查看mysqli_connect() 的参数4,然后您可以松开mysqli_db_select()
  • @Saty 我同意,但错误在这一行 $db = mysqli_connect("localhost:9080","root","");
  • @RiggsFolly 是的,它正在监听 9080 端口

标签: php mysql mysqli wamp wampserver


【解决方案1】:

您与数据库的连接将连接句柄/对象保存在一个名为 $db 的变量中,但您尝试选择要使用的数据库尝试使用一个名为 $connection 的变量,所以它实际上只是一个复制/粘贴 TYPO。

<?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";
?>

小笔记

您可以在mysql_connect() 函数中使用这样的第四个参数完成连接和数据库选择。

MySQL 中的mysqli_db_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";
?>

来自下面的cmets.....

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

所以改变

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

对任何一个

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

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

您现在也可以删除

ini_set('mysql.connect_timeout', 300);

ini_set('default_socket_timeout', 300);

并将max_allowed_Packet 恢复为默认值

【讨论】:

  • 我完全同意,但错误在 $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD);我还附上了错误截图。请检查。我也更新了 $connection 到 $db 但错误是一样的。
  • 我实际上无法读取图像,它太小了,但我知道 WAMPServer。当您决定将 MySQL 从端口 3306 移动到 9080 时,您是如何做到的?以及您使用的是哪个版本的 WAMPServer
  • 我已经更新了 httpd.conf 文件中的端口。我正在使用 WAMP 服务器 5.7.14
  • 没有 WAMPServer 5.7.14,但是有一个 MySQL 5.7.14
  • 同样httpd.conf 文件不会影响或控制 MySQL 服务器侦听的端口号。你的意思是你已经把 Apache 监听的端口从 80 改成了 9080 注意 Apache 和 MySQL 不是一回事,显然不监听同一个端口。
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2010-12-20
  • 2011-04-25
  • 2015-01-15
  • 2016-03-06
相关资源
最近更新 更多