簡體   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