MYSQL从存储过程中的预准备语句获取更新的行计数

时间:2014-01-13 17:51:21

标签: mysql stored-procedures sql-update prepared-statement rowcount

好的,我在存储过程中有这段代码:

       SET @qry = CONCAT('UPDATE ', usermeta_table, ' SET meta_value = ', @token_count, ' WHERE user_id = ', @temp_id, ' AND meta_key = "token_count"');
        PREPARE stmt FROM @qry;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        SET @did_update = (SELECT ROW_COUNT());

        IF @did_update = 0 THEN

            SET @qry = CONCAT('INSERT INTO ', usermeta_table, '(user_id, meta_key, meta_value) VALUES (', @temp_id, ', "token_count", ', @token_count, ')');
            PREPARE stmt FROM @qry;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;

        END IF;

我所追求的是如果更新没有更新任何行,那么在表格中排成一行。

出于某种原因,当我运行上面的代码did_update总是返回0时,即使更新已更新某些行,也会发生插入。我该如何解决这个问题?

更新: 我刚刚意识到,如果更新中的值没有更改,尽管存在行,则返回零行。这就是导致我的逻辑崩溃的原因......

1 个答案:

答案 0 :(得分:4)

根据this site, “你可以在准备好的语句中使用ROW_COUNT(),但是你需要在EXECUTE之后调用它,而不是在DEALLOCATE PREPARE之后调用它,因为allocate prepare的行数总是为0。”