首頁 > 後端開發 > php教程 > 為什麼在 PHP 和 MySQL 查詢中出現「指令不同步」錯誤?

為什麼在 PHP 和 MySQL 查詢中出現「指令不同步」錯誤?

Susan Sarandon
發布: 2024-12-19 21:28:16
原創
208 人瀏覽過

Why Do I Get a

PHP 程式碼與MySQL 查詢中的「指令不同步」錯誤

使用mysqli 執行涉及多個MySQL 查詢的PHPMy 腳本時,可能會出現錯誤:「命令不同步;您現在無法執行此命令。」當在取得和處理前一個查詢的結果或清除MySQL伺服器的查詢命令快取之前嘗試後續查詢時,就會出現此問題。

問題中提供的程式碼執行兩個查詢:一個用於計算記錄,另一個用於計算記錄。根據搜尋字串檢索行。但是,在取得第一個查詢的結果之前,會執行第二個查詢。這會觸發“不同步”錯誤。

錯誤原因

  • 無緩衝查詢: MySQLI 預設使用無緩衝查詢對於準備好的語句,這表示結果會在可用時分部分進行串流傳輸。如果在緩衝第一個查詢結果之前嘗試後續查詢,命令可能會不同步並導致錯誤。
  • 不完整的查詢執行:當嘗試多個查詢而沒有正確處理結果,不完整的命令可能會累積在伺服器的快取中。這可能會中斷後續查詢並導致錯誤。

可能的解決方案

  • 緩衝區結果:要避免此錯誤,在執行下一個查詢之前,使用$stmt->store_result() 緩衝查詢結果。使用 $stmt->fetch() 取得緩衝的結果,然後使用 $stmt->free_result() 清除伺服器的快取。
  • 取得第一個查詢結果: 或者,取得所有將第一個查詢的結果放入陣列中。這會消耗結果並允許執行後續查詢,而不會受到未取得結果的干擾。
  • 使用事務:如果多個查詢相關且必須順序執行,請考慮使用事務來處理該過程作為單個原子

示例

下面是使用$stmt->store_result()緩衝第一個查詢結果的範例:

<?php
$con = mysqli_connect("localhost", "user", "password", "db");
$brand ="o";
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
$con->query("SET NAMES 'utf8'");
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
}
登入後複製

以上是為什麼在 PHP 和 MySQL 查詢中出現「指令不同步」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板