使用 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