投票系统的Mysql存储过程遇到的一些问题.

@author songfeng
1,预处理语句EXECUTE STMT USING 变量名必须是用户定义变量(@变量名);
2,不能用变量代替PREPARE 内的 表名, 列名, 用CANCAT方式连接可以解决;

完整语句.
delimiter //
CREATE PROCEDURE vote_post(para_archive_id INT, para_star INT, para_time INT)
BEGIN
    DECLARE voteNum INT;
    SET @starName=concat('star', para_star);
    SET @archive_id = para_archive_id;
    SET @star = para_star;
    SET @time = para_time;
    SELECT COUNT(archive_id) INTO voteNum FROM `vote` WHERE `archive_id`=@archive_id;
    IF voteNum > 0 THEN
        SET @s = concat("UPDATE LOW_PRIORITY `vote` SET ", @starName, "=", @starName, "+ 1, `average`=((`star1` * 1) + (`star2` * 2) + (`star3` * 3) + (`star4` * 4) + (`star5` * 5))/(`star1` + `star2` + `star3` + `star4` + `star5`) WHERE archive_id=?");
      PREPARE stmtSql FROM @s;
      EXECUTE stmtSql USING @archive_id;
    ELSE
       SET @s = concat("INSERT DELAYED INTO `vote`(`archive_id`,", @starName, ", `average`, `dateline`) VALUE(?, 1, ?, ?)");
       PREPARE stmtSql FROM @s;
       EXECUTE stmtSql USING @archive_id, @star, @time;
    END IF;
END
delimiter ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值