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

标签 php mysql stored-procedures pdo prepared-statement

我已经使用 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/

相关文章:

php - 如何使用 AS 别名执行复杂查询

mysql - 连接3个mysql表

sql-server - 将 sp_executesql 与 params 一起使用会提示需要声明变量

php - 从 instagram 小部件调整显示图像的大小

PHP 安全 - $_POST - 注入(inject)

php - 如何访问 Laravel API 路由?

mysql - 从表中删除重复记录

sql - 学习如何编写复杂的存储过程

sql-server-2008 - SQL 服务器 : stored procedure saves with errors

php - SQLSTATE[HY093] : Invalid parameter number: parameter was not defined