我已经使用 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 //
这是我用来调用 proc 的代码,$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
如果我像这样直接调用proc:
CALL proc_OUT(@res);
SELECT @res;
它按预期工作,这使我相信 PHP 调用它的方式存在问题,但是我似乎找不到问题所在。我按照手册中的说明进行操作,但仍然出现此错误。谁能建议我做错了什么?任何建议将不胜感激。非常感谢!