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

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

Patricia Arquette
Patricia Arquette原創
2024-11-08 06:58:021087瀏覽

Why Does PDO Throw

使用 PDO 呼叫帶輸出參數的預存程序

使用 PDO呼叫預存程序可以是一個無縫的過程;然而,當嘗試使用不含參數的預存程序時,可能會出現一個神秘的錯誤:

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;

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

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

以上是為什麼在呼叫帶有 Out 參數的預存程序時,PDO 會拋出「OUT 或 INOUT 參數...不是變數」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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