【问题标题】:PHP MySQLi Insert Query Error - Server Has Gone AwayPHP MySQLi 插入查询错误 - 服务器已消失
【发布时间】:2016-03-01 09:43:46
【问题描述】:

在尝试插入记录数组时,出现错误: 1. MySQL 服务器消失了 2. 读取结果集头部错误

以下是详细信息:

// DB2
$host1 = 'localhost';
$user1 = 'root';
$pass1 = '';
$db1   = 'my_db';
$conn1 = mysqli_connect($host1, $user1, $pass1, $db1);

....
...
...
...

//echo '<pre>'; print_r($countryArr); die;

$countryArr 结果:

$query = "INSERT INTO `cities` (`country_id`, `city`, `soft_delete`, `date_added`) VALUES " . implode(',', $countryArr);
mysqli_query($conn1, $query);

错误:

【问题讨论】:

  • 要插入多少条记录? MySQL server has gone away 是因为 php 失去了与 mysql 的连接
  • @FakhruddinUjjainwala 大约要插入 50000 条记录。
  • 更改 php.ini max_execution_time = 0(或 3600000)中的设置

标签: php mysql mysqli


【解决方案1】:

MySQL server has gone away 可能是由于超过了 mysql 数据包大小的限制。 检查 MySQL 变量max_allowed_packet 并尝试增加它。

【讨论】:

    【解决方案2】:

    第 1 步:

    set_time_limit(0); // this will remove the time limit if any.
    

    第 2 步:

    同时检查 ping 以保持连接,http://php.net/manual/en/mysqli.ping.php

    第 3 步

    尝试批量执行插入。即 500 条语句的批次。

    【讨论】:

    • @KunwarbirS。很高兴帮助你。 :)
    【解决方案3】:

    当您的 mysql 服务器设置为在小于 13 的秒数后终止连接时,您的查询需要 13+ 秒才能执行。

    在你的 mysql 配置文件中更改这一行(通常位于 /etc/mysql)

    wait_timeout=15 //any reasonable amount of time more than 13 seconds for your example
    

    PS:您可能还需要更改允许的最大连接数以反映 wait_time 的变化。为此,请更改 mysql 配置文件中的这两行。

    max_connections=90
    max_user_connections=60
    

    可能需要更改最大连接数,具体取决于服务器的活动。例如,如果您的超时时间为 5 且您的最大连接数为 30,并且假设所有查询都是长查询,处理时间正好为 5 秒,那么您的服务器一次只能提供 6 个连接。

    现在假设您将超时更改为 15 并且查询需要 15,您的服务器将只能提供 2 个连接。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 2018-01-30
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多