MariaDB 准备语句 Returns 格式错误的通信数据包
MariaDB Prepared Statement Returns Malformed communication packet
我今天早上刚开始在租用的服务器 space 上从几个准备好的语句中收到错误:“格式错误的通信数据包。”
它似乎只发生在准备好的语句上。此代码已在服务器上存在多年,但今天开始出现错误。
这个简单的语句抛出错误:
$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, WeekDate, Qty FROM inventoryrooted";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$code = $row["RootedID"];
$WeekDate = $row["WeekDate"];
$Qty = $row["Qty"];
$stmtInsertRC->execute();
}
我在网站上有数百条准备好的声明,它们运行良好。这似乎只发生在几个 table 上。巧合的是,我今天早上在 Navicat 中打开了这两个 table 来查看数据……不确定这是否会损坏它们?
我已尝试修复 table、制作新副本并恢复 table。我还要求站点管理员重新启动 MariaDB(仍在等待)。
有人对我应该在哪里寻找解决方案有任何建议吗?我是不是找错树了?
10.3.26-MariaDB
PHP 7.2.34
您的问题很可能是由您的主机升级到昨天发布的 MariaDB 10.3.26 引起的。请参阅 MDEV-24121 for more information. I haven't yet heard a good explanation, but reports claim that downgrading MariaDB, upgrading PHP to 7.3, or enabling PDO 暂时处理此问题。
我相信将此添加到您的代码中会启用 prepared-statement 仿真:
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
我今天早上刚开始在租用的服务器 space 上从几个准备好的语句中收到错误:“格式错误的通信数据包。”
它似乎只发生在准备好的语句上。此代码已在服务器上存在多年,但今天开始出现错误。
这个简单的语句抛出错误:
$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, WeekDate, Qty FROM inventoryrooted";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$code = $row["RootedID"];
$WeekDate = $row["WeekDate"];
$Qty = $row["Qty"];
$stmtInsertRC->execute();
}
我在网站上有数百条准备好的声明,它们运行良好。这似乎只发生在几个 table 上。巧合的是,我今天早上在 Navicat 中打开了这两个 table 来查看数据……不确定这是否会损坏它们? 我已尝试修复 table、制作新副本并恢复 table。我还要求站点管理员重新启动 MariaDB(仍在等待)。
有人对我应该在哪里寻找解决方案有任何建议吗?我是不是找错树了?
10.3.26-MariaDB
PHP 7.2.34
您的问题很可能是由您的主机升级到昨天发布的 MariaDB 10.3.26 引起的。请参阅 MDEV-24121 for more information. I haven't yet heard a good explanation, but reports claim that downgrading MariaDB, upgrading PHP to 7.3, or enabling PDO 暂时处理此问题。
我相信将此添加到您的代码中会启用 prepared-statement 仿真:
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);