从准备好的语句MySQL中获取返回的值

时间:2014-12-02 09:07:50

标签: php mysql stored-procedures prepared-statement

我试图创建一个存储过程,我希望在数据库中获取一个随机值,其中表名和我的查询的其他条件是动态的(在存储过程参数中)。

    DROP PROCEDURE IF EXISTS `myproc`;

DELIMITER //
CREATE PROCEDURE `myproc`(IN `tablename` VARCHAR(50), IN `isShow` TINYINT(1), IN `isAdd` TINYINT(1))
BEGIN
    SET @tname := tablename;
    SET @isshow := isShow;
    SET @isAdd := isAdd;
    SET @pcode := '';

    SET @s = CONCAT('SELECT t.pcode
        FROM ', @tname, ' AS t 
        JOIN (SELECT ROUND(RAND() * (SELECT MAX(idx) FROM ', @tname,' )) AS id) AS x 
        WHERE 
            t.idx >= x.id AND 
            t.isShow = ', @isshow,' AND
            t.isAdd = ', @isAdd,
        ' LIMIT 1');

    checkhand: WHILE (!@pcode) DO
        PREPARE sp_query FROM @s; 
        EXECUTE sp_query; 
        DEALLOCATE PREPARE sp_query;

        LEAVE checkhand;
    END WHILE ;
END //
DELIMITER ;

由于我使用@var作为tablename,因此我引用了此SO并在CONCAT中创建了我的SQL查询,然后将其作为Stored Procedure运行。现在,我的表有漏洞,所以我做的是做一个WHILE循环,直到获得 pcode 值的记录。

我的问题是,它仍然返回空白pcode,这意味着我的@pcode var没有得到查询的返回值。老实说,我不知道如何将我的查询结果存储在预处理语句中,并将其作为存储过程的结果返回。

任何帮助都可以。请指正。不是专业用户。感谢

我的while循环应该这样做:

while (!t.pcode) {
    // do query and check if i get t.pcode
    return t.pcode
}

0 个答案:

没有答案