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-不重要