【问题标题】:mysqli_query(): MySQL server has gone away [duplicate]mysqli_query():MySQL服务器已消失[重复]
【发布时间】:2019-06-23 03:08:00
【问题描述】:

我收到以下错误:

Warning: mysqli_query(): MySQL server has gone away in (local db)

Warning: mysqli_query(): Error reading result set's header in (local db)

我首先建立连接:

$connection = new mysqli($server, $user, $pass, $db) or die("unable");

然后这个:

$sql = $connection->prepare("INSERT INTO comments (name,mail,homepage,comment,time) VALUES (?,?,?,?,?)");
$sql->bind_Param('sssss',$name,$mail,$homepage,$comment,$time);
$sql->execute();
if($sql){
  if(!addPics($connection, $image_content, $mime, $time)){
      //other code
  }

addPics 看起来像这样:

function addPics($connection, $image_content, $mime, $time){

    $sql = $connection->prepare("INSERT INTO pictures (picture, mime, time)  VALUES (?,?,?)");
    $sql->bind_Param('sss',$image_content,$mime, $time);
    $sql->execute();
    if($sql){
        return true;
    } else {
        return false;
    }

第二个 sql->execute 发生错误。我的猜测是,这是因为我将连接用于多个请求,但我对 PHP 的了解并不能让我找到解决方案。

谢谢!

【问题讨论】:

  • 感谢 progman 将其标记为重复,但它并没有解决我增加最大允许数据包的问题。或许您可以通过其他方式提供帮助,而不是担任学校礼堂监督员?
  • 尝试释放语句对象——即$sql->close();——另外,将$sql->execute()的结果分配给一个变量并测试它而不是$sql
  • 感谢@RamRaider,它解决了我的问题。不幸的是它开辟了一个新的..

标签: php


【解决方案1】:

展示我的cmets

如果某些列名(或全部)在 SQL 中具有特殊含义,则最好在它们周围使用反引号 - 例如 nametime

$sql = $connection->prepare("INSERT INTO comments (`name`,`mail`,`homepage`,`comment`,`time`) VALUES (?,?,?,?,?)");
$sql->bind_Param('sssss',$name,$mail,$homepage,$comment,$time);


/* assign a variable to the `execute` method and test that var */
$result = $sql->execute();
if( $result ){

    /* the statement is now finished with, close it */
    $sql->close();


    if(!addPics($connection, $image_content, $mime, $time)){
        //other code
    }

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2012-05-25
    • 2011-06-07
    • 2010-12-20
    • 2013-06-13
    相关资源
    最近更新 更多