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