mysql update更新表中的所有用户行

时间:2014-07-19 21:44:28

标签: mysql asp.net json web-services mysql-workbench

问题: 我有一个mySql存储过程,它运行以下更新:

IF target = 'sup' THEN
    UPDATE my_table SET deleted = 1, last_updated = lastUpdate WHERE id = ID AND user_id = accountID;
END IF;

输入参数为:

(IN ID BIGINT, IN lastUpdate DATETIME, IN target VARCHAR(3), IN accountID BIGINT)

当调用此sproc时,mySql会更新表中user_id的所有行,并且似乎忽略了WHERE子句中的id。

背景 移动应用程序对.NET Web服务进行ajax json调用,然后调用mySql sproc。

json调用如下:

{"id":["5","6","10"],"lastUpdated":"2014-07-19 22:28:53","target":"sup","accountID":"309"}

在.net webservice上,它将每个id条目转换为Int64并将其发送到mySql sproc:

For Each checkedID As String In id
        cmd.Parameters.AddWithValue("@ID", CType(checkedID, Int64)).Direction = ParameterDirection.Input
        cmd.Parameters.AddWithValue("@lastUpdate", dte).Direction = ParameterDirection.Input
        cmd.Parameters.AddWithValue("@target", target).Direction = ParameterDirection.Input
        cmd.Parameters.AddWithValue("@accountID", accountID).Direction = ParameterDirection.Input
        cmd.ExecuteNonQuery()
        cmd.Parameters.Clear()
    Next

研究和修复尝试: 大量搜索

使用MySQL Workbench;直接正确运行SQL只更新目标行:

UPDATE my_table SET deleted = 1, last_updated = '1970-01-01 10:10:10' WHERE id = "7" AND user_id = 309;

但是,如果我从MySQL Workbench中调用sproc,它仍会更新目标用户的所有行:

CALL `my_sproc`(7, '1990-01-01 10:10:10', 'sup', 309);

我看不出任何问题,除非我只是看了太长时间。移动应用程序已接近100个MySQL sprocs,这是唯一导致问题的。

我很难过。

1 个答案:

答案 0 :(得分:0)

只需添加对表的显式引用即可解决问题。

my_table.id