2

好,我有这样的代码在存储过程:MYSQL得到准备好的声明中更新的行数在存储过程

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

UPDATE:我刚刚意识到,如果值不更新,尽管现有的IT返回零行的行改变。这是什么原因造成我的逻辑,打破...

+0

当您释放时,它有什么关系吗? – tofutim

+0

@tofutim - 没有关系,当 – Brady

回答

4

this site, “你可以使用ROW_COUNT()和预处理语句,但你需要调用它后执行的,DEALLOCATE PREPARE不是之后,因为行数分配准备总是0.“。

+0

这为我解决它。谢谢 –