准备好的声明返回零结果

时间:2011-05-31 21:30:10

标签: mysql sql

我正在尝试执行以下准备好的声明:

PREPARE stmt FROM 'SELECT * FROM Inventory I WHERE I.ParentId = ?';
EXECUTE stmt USING @parentId;

DEALLOCATE PREPARE stmt;

当我执行此语句时,它返回没有行的列标题。它应该返回6行。

如果我在没有PREPARE和EXECUTE语句的情况下执行与普通SQL语句相同的语句,我会得到结果,例如

SELECT * FROM Inventory I WHERE I.ParentId = parentId;

返回结果。我究竟做错了什么?是否有某种铸造正在使我的声明无效?

更新,parentId作为参数传入,例如

CREATE DEFINER=`george`@`%` PROCEDURE `ListInventoryByParentId`(IN parentId INT)

1 个答案:

答案 0 :(得分:1)

用户变量@parentId和过程参数parentID是独立的。 在执行语句之前,需要将用户变量设置为procedure参数。

SET @parentID = parentId;