微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MariaDB准备好的语句返回格式错误的通信数据包

如何解决MariaDB准备好的语句返回格式错误的通信数据包

今天早晨,我刚开始从几个准备好的语句中获取一些错误:“格式错误的通信数据包。”

这似乎仅在准备好的语句上发生。这段代码已经在服务器上使用了多年,但今天开始引发错误

这个简单的语句引发错误

$stmt=$conn->prepare("SELECT RootedID,WeekDate,Qty FROM inventoryrooted");
$stmt->execute();
echo $stmt->error;
$stmt->bind_result($code,$WeekDate,$Qty);
$stmt->store_result();
while($stmt->fetch()){
     $stmtInsertRC->execute();
}
$stmt->close();

如果我将其更改为普通连接,则效果很好:

$sql = "SELECT RootedID,Qty FROM inventoryrooted";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
 $code = $row["RootedID"];
 $WeekDate = $row["WeekDate"];
 $Qty = $row["Qty"];        
 $stmtInsertRC->execute();
}

我在网站上有数百个准备就绪的陈述,它们工作正常。这似乎仅在几个表上发生。巧合的是,我今天早上在Navicat中打开了这两个表,以查看数据...不确定是否可能损坏了它们? 我尝试过修理桌子,制作新副本并恢复桌子。我还要求站点管理员重新启动MariaDB(仍在等待)。

有人对我应该在哪里寻找解决方案有任何建议吗?我在吠错树吗?

10.3.26-MariaDB

PHP 7.2.34

解决方法

您的麻烦很可能是由主机昨天发布的升级到MariaDB 10.3.26引起的。有关更多信息,请参见MDEV-24121。我还没有听到很好的解释,但是有报道称降级MariaDB,将PHP升级到7.3或enabling PDO暂时可以解决这个问题。

我相信将其添加到您的代码中将启用预准备语句仿真:

$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。