我已经使用 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));
关于php - 使用 PDO 调用带有 Out 参数的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58440408/