繁体   English   中英

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

[英]MariaDB Prepared Statement Returns Malformed communication packet

今天早上我刚开始在一些租用的服务器空间上从几个准备好的语句中得到一个错误:“格式错误的通信数据包”。

它似乎只发生在准备好的语句上。 此代码已在服务器上多年,但今天开始抛出错误。

这个简单的语句抛出错误:

$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();

如果我将其更改为 vanilla 连接,则它可以正常工作:

$sql = "SELECT RootedID, WeekDate, 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 或启用 PDO可以暂时解决这个问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM