首頁 >資料庫 >mysql教程 >PHP MySQLi「指令不同步」:如何修復錯誤?

PHP MySQLi「指令不同步」:如何修復錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-22 10:38:12555瀏覽

PHP MySQLi

PHP 指令不同步:解決困境

當使用 PHP 和 MySQLi 從 MySQL當資料庫檢索資料時,執行多個準備好的語句有時會導致錯誤,「命令不同步,您無法執行該命令現在。」

原因和解決方案

當連線物件($mysqli)有先前查詢的待處理結果時,會發生此錯誤。要解決這個問題,您需要在每個準備好的語句之後呼叫 $mysqli 物件上的 next_result() 函數。

考慮這個範例:

$stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1");
$stmt->bind_param('s', $loweredEmail);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
$stmt->fetch();
$stmt->free_result();
$stmt->close();

while ($mysqli->more_results()) {
    $mysqli->next_result();
}

$stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
$stmt1->bind_param('s', $user_id);
// This is where the error occurs
$stmt1->execute();

在此程式碼中,錯誤將是執行第二條語句($stmt1)時拋出。要修復此問題,請在執行$stmt1 之前添加以下行:

$mysqli->next_result();

其他提示

  • 確保始終調用free_result() 並close( ) 在每次查詢執行後在$stmt 物件上。
  • 為每個查詢使用單獨的 $stmt 物件如果可能的話,準備好的語句。
  • 如果即使在嘗試上述解決方案後仍遇到錯誤,請考慮使用 mysqli::more_results() 和 mysqli::next_result() 檢查緩衝區中剩餘的任何待處理結果。

以上是PHP MySQLi「指令不同步」:如何修復錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn