”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么在调用带有 Out 参数的存储过程时,PDO 会抛出“OUT 或 INOUT 参数...不是变量”?

为什么在调用带有 Out 参数的存储过程时,PDO 会抛出“OUT 或 INOUT 参数...不是变量”?

发布于2024-11-10
浏览:173

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