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

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

Barbara Streisand
發布: 2024-11-18 10:03:02
原創
1013 人瀏覽過

PHP MySQLi

PHP 指令不同步錯誤:理解與解決方法

在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();
登入後複製

其他提示

  • 為每個準備好的語句使用單獨的物件以避免混亂。
  • 使用 mysqli_stmt->error 執行語句後總是檢查錯誤。
  • 除非必要,否則避免使用 MYSQLI_USE_RESULT,因為它可能導致同步問題。

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

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