在MySQL存储过程中使用选择

时间:2012-06-14 08:25:56

标签: mysql stored-procedures

我在我的数据库中存储过程,我需要查找一个表并交叉引用一个id,然后使用返回的行我需要将信息插入到另一个表中,但我似乎无法使用查询中的信息插入。这就是我的......

BEGIN
#Routine body goes here...
SET @UID = uid;
SET @UIDTOFB = uid_to;

SET @SQLTEST = CONCAT('SELECT users.user_auto_id FROM users WHERE users.user_fb_uid=     @UIDTOFB LIMIT 1');
PREPARE sqlcmd from @SQLTEST;
EXECUTE sqlcmd;

INSERT INTO challenges(challenge_from_uid, challenge_to_uid, challenge_dateadded) VALUES(@UID, @SQLTEST.users.user_auto_id, now());

SET @LASTID = LAST_INSERT_ID();
SELECT @LASTID as id;

END

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

由于您遗漏了一些',因此不会插入@UIDTOFB的值。它将整个语句作为一个字符串,因此语句失败。

SET @SQLTEST = CONCAT('SELECT users.user_auto_id FROM users WHERE users.user_fb_uid=     @UIDTOFB LIMIT 1');
PREPARE sqlcmd from @SQLTEST;
EXECUTE sqlcmd;

无论如何,我建议你使用这样的参数:

PREPARE sqlcmd from 'SELECT users.user_auto_id FROM users WHERE users.user_fb_uid= ? LIMIT 1';
EXECUTE sqlcmd USING @UIDTOFB;

您可以详细了解here in the manual

更新:现在我明白了,你想做什么。这样做是这样的:

SELECT @anyVariable:=users.user_auto_id FROM users WHERE users.user_fb_uid= @UIDTOFB LIMIT 1;
INSERT INTO challenges(challenge_from_uid, challenge_to_uid, challenge_dateadded) VALUES(@UID, @anyVariable, now());