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

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

Patricia Arquette
发布: 2024-11-08 06:58:02
原创
1129 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板