好的,我在存储过程中有这段代码:
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时,即使更新已更新某些行,也会发生插入。我该如何解决这个问题?
更新: 我刚刚意识到,如果更新中的值没有更改,尽管存在行,则返回零行。这就是导致我的逻辑崩溃的原因......
答案 0 :(得分:4)
根据this site, “你可以在准备好的语句中使用ROW_COUNT(),但是你需要在EXECUTE之后调用它,而不是在DEALLOCATE PREPARE之后调用它,因为allocate prepare的行数总是为0。”