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

时间:2017-07-10 12:29:11

标签: php mysql mysqli wamp wampserver

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

1 个答案:

答案 0 :(得分: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";
?>

小笔记

您可以使用第4个参数在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";
?>

来自以下评论.....

默认情况下MySQL在端口3306上运行,MariaDB在WAMPServer中的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恢复为默认值