MYSQL从存储过程中的准备语句获取update的行数

MYSQL从存储过程中的准备语句获取update的行数,mysql,stored-procedures,sql-update,prepared-statement,rowcount,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

好的,我在存储过程中有以下代码:

       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,因此即使更新更新了一些行,插入也会发生。我该如何解决这个问题

更新:我刚刚意识到,如果更新中的值不改变,尽管存在行,它将返回零行。这就是导致我的逻辑中断的原因…

根据, 您可以在prepared语句中使用ROW_COUNT,但需要在EXECUTE之后调用它,而不是在DEALLOCATE PREPARE之后,因为allocate PREPARE的行计数始终为0。

根据,
您可以在prepared语句中使用ROW_COUNT,但您需要在EXECUTE之后调用它,而不是在DEALLOCATE PREPARE之后调用它,因为allocate PREPARE的行计数始终为0。

何时解除分配重要吗?@tofutim-不重要,何时解除分配重要吗?@tofutim-不重要