所以我有这个存储过程:
DELIMITER $$
CREATE DEFINER=`admin`@`%` PROCEDURE `GetGoalDetail`(IN goalId int)
DETERMINISTIC
BEGIN
SELECT *
FROM actions
Where GoalId = goalId;
Select * From contributors
where GoalId = goalId;
Select * From discussions
where GoalId = goalId;
END
当我打电话给他时:
CALL 'GetGoalDetail`(15);
我希望看到与goalId = 15相关的所有内容。但是第二个查询总是会返回所有贡献者!为什么是这样?是否有一些我失踪了?
答案 0 :(得分:4)
您的参数名称与您的表字段名称相同,这意味着MySQL不使用您的参数:
CREATE DEFINER=`admin`@`%` PROCEDURE `GetGoalDetail`(IN goalId int)
^^^^^^----this
SELECT *
FROM actions
Where GoalId = goalId;
^^^^^----^^^^^^--- which of those two is the field, and which is the parameter?
由于mysql无法知道您正在尝试fieldname = parameter
,因此它只是将其解释为fieldname = fieldname
,或者根本没有将where子句解释。
尝试将您的参数重命名为其他内容,这在您的任何表格中都不存在,例如“foobar”或其他任何内容。