gpt4 book ai didi

php - 使用 PDO 调用带有 Out 参数的存储过程

转载 作者:行者123 更新时间:2023-11-29 15:33:57 38 4
gpt4 key购买 nike

我已经使用 PDO 一段时间了,并且正在重构一个项目,以便它使用存储过程而不是内联 SQL。我收到无法解释的错误。我使用的是 PHP 版本 5.3.5 和 MySQL 版本 5.0.7。

我只是想获得一个带有输出的基本存储过程来工作。这是存储过程:

DELIMITER //  
CREATE PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100))
BEGIN
SET var1 = 'This is a test';
END //

这是我用来调用过程的代码,$db 是 PDO 的一个实例:

$stmt = $db->prepare("CALL proc_OUT(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);

// call the stored procedure
$stmt->execute();
echo $returnvalue;

简单吧?但是,它会导致以下错误:

exception 'PDOException' with message '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

如果我像这样直接调用过程:

CALL proc_OUT(@res);
SELECT @res;

它按预期工作,这让我相信 PHP 调用它的方式存在问题,但我似乎找不到问题所在。我按照 the manual 中的说明进行操作但我仍然收到此错误。谁能建议我可能做错了什么?任何建议将非常感激。非常感谢!

最佳答案

这里似乎存在一个错误,我找到的最佳解决方案是:

http://www.php.net/manual/en/pdo.prepared-statements.php#101993

来自上面链接的评论:

$dbh->query("CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter)"); 
$dbh->query("SELECT @someOutParameter");

// OR, if you want very much to use PDO.Prepare(),
// insert "SELECT @someOutParameter" in your stored procedure and then use:

$stmt = $dbh->prepare("CALL SomeStoredProcedure(?, ?)");
$stmt ->execute(array($someInParameter1, $someInParameter2));

另请参阅:https://stackoverflow.com/a/4502524/815386

关于php - 使用 PDO 调用带有 Out 参数的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58440408/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com