」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼在呼叫帶有 Out 參數的預存程序時,PDO 會拋出「OUT 或 INOUT 參數...不是變數」?

為什麼在呼叫帶有 Out 參數的預存程序時,PDO 會拋出「OUT 或 INOUT 參數...不是變數」?

發佈於2024-11-10
瀏覽:559

Why Does PDO Throw

使用PDO 呼叫帶輸出參數的存儲過程

使用PDO 調用存儲過程可以是一個無縫的過程;但是,當嘗試使用不帶out 參數的預存程序時,可能會出現一個神秘的錯誤:

SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 1 for routine mydb.proc_OUT is not a variable or NEW pseudo-variable in BEFORE trigger

解決方案:PDO特殊性

深入研究PDO 手冊及其附帶的討論,揭示了PDO 準備好的語句功能中的異常情況。問題的癥結在於預存過程中 out 參數的處理。

要修正此問題,需要特定的解決方法:

$stmt = $db->prepare("CALL SomeStoredProcedure(?, ?)"); 
$stmt->execute(array($someInParameter1, $someInParameter2));

替代方法

另一個選項涉及修改預存程序以包含檢索的SELECT 語句儲存過程執行後的out參數:

CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter); 
SELECT @someOutParameter;

這種修改後的方法模仿直接呼叫 MySQL 中的預存程序時觀察到的行為。

透過採用這些解決方法,與使用 PDO 呼叫不帶參數的預存程序相關的神秘錯誤消散,允許無縫執行和檢索輸出參數值。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3