首页 >数据库 >mysql教程 >为什么在调用带有 Out 参数的存储过程时,PDO 会抛出'OUT 或 INOUT 参数...不是变量”?

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

Patricia Arquette
Patricia Arquette原创
2024-11-08 06:58:021103浏览

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