使用 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中文網其他相關文章!