【发布时间】:2012-11-03 04:35:10
【问题描述】:
我使用 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 调用它的方式存在问题,但我似乎无法找到问题所在。我按照the manual 中的说明进行操作,但仍然收到此错误。谁能建议我做错了什么?任何建议将不胜感激。非常感谢!
【问题讨论】:
-
我已经用 mysql 5.5.28 和 php 5.3.10 复制了这个。此外,您似乎有两个版本的
$return_value- 另一个没有下划线。这是故意的吗?似乎对输出没有影响。
标签: php mysql stored-procedures pdo prepared-statement