在PHP/MySQLi 中執行多個準備好的語句時,可能會遇到「指令不同步”錯誤。這是由於執行的語句數量和正在處理的結果數量之間不匹配所造成的。要解決此問題,請考慮以下見解和解決方案:
當MySQL 客戶端收到的資料多於特定語句的預期時,就會出現“不同步”錯誤。當使用帶有 MYSQLI_USE_RESULT 標誌的 mysqli::query 時會發生這種情況。此標誌指示 MySQL 不要完全緩衝結果,導致後續命令不同步。
在您提供的程式碼中,使用兩個準備好的語句從資料庫。第一個語句檢索使用者訊息,而第二個語句檢索權限。但是,您在執行第二條語句時遇到了錯誤。
要解決該錯誤,您必須在執行第二條語句之前釋放第一條語句的結果。這是透過呼叫 mysqli_stmt->free_result() 函數來實現的。此外,在每個查詢後呼叫 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(); $mysqli->next_result(); // Ensure no stray results are present $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1"); $stmt1->bind_param('s', $user_id); $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($privileges); $stmt1->fetch();
以上是PHP MySQLi「指令不同步」錯誤:如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!