mysqli_query():MySQL服务器已消失[重复]

Posted

技术标签:

【中文标题】mysqli_query():MySQL服务器已消失[重复]【英文标题】:mysqli_query(): MySQL server has gone away [duplicate] 【发布时间】: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,它解决了我的问题。不幸的是它开辟了一个新的.. 【参考方案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
    

【讨论】:

以上是关于mysqli_query():MySQL服务器已消失[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 的 mysqli_query() 中转义双引号字符?

警告:mysqli_query():无法获取 mysqli [重复]

php mysqli mysqli_query() mysqli_real_query()

mysqli_query函数的问题[重复]

mysqli_query 通过变量输入

Mysql学习