Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程-删除忽略“WHERE”子句_Mysql_Sql_Database - Fatal编程技术网

MySQL存储过程-删除忽略“WHERE”子句

MySQL存储过程-删除忽略“WHERE”子句,mysql,sql,database,Mysql,Sql,Database,我们有一个存储过程GetToken,当用户登录到我们的站点时调用它。此存储过程生成一个GUID,将其返回给客户端,并在TokenIndex表中插入一个条目。GUID只在一段较长的时间内有效,因此每次用户登录时,我们都会生成一个新的GUID并删除该特定用户以前的所有TokenIndex项。我们遇到的问题是delete语句正在删除TokenIndex表中的所有条目,这让我们抓狂,就好像它忽略了delete FROM TokenIndex语句中的WHERE LoginID=LoginID子句一样。请参

我们有一个存储过程GetToken,当用户登录到我们的站点时调用它。此存储过程生成一个GUID,将其返回给客户端,并在TokenIndex表中插入一个条目。GUID只在一段较长的时间内有效,因此每次用户登录时,我们都会生成一个新的GUID并删除该特定用户以前的所有TokenIndex项。我们遇到的问题是delete语句正在删除TokenIndex表中的所有条目,这让我们抓狂,就好像它忽略了delete FROM TokenIndex语句中的WHERE LoginID=LoginID子句一样。请参阅下面的存储过程:

CREATE DEFINER=`arcanatekauth`@`%` PROCEDURE `GetToken`(    
   IN _username NVARCHAR(100),   
   IN _password TINYBLOB   
)       
BEGIN
   declare guid CHAR(36);    
   declare clientId int;
   declare loginId int;
   declare clientConnectionString nvarchar(500);

   Select li.ClientID, li.ID INTO clientId, loginId
   FROM LoginIndex li
   WHERE li.UserName = _username and li.Password = _password;

   if(clientId > 0)
   then
   begin
      SET guid = UUID();            
      DELETE FROM TokenIndex
      WHERE LoginID = loginId;

      SELECT ci.ConnectionString INTO clientConnectionString
      FROM ClientIndex ci
      WHERE ci.ID = clientId;

      INSERT INTO TokenIndex (Token, LoginID, ConnectionString, ExpirationDtTm)
      VALUES (guid, loginId, clientConnectionString, NOW() + INTERVAL 1 HOUR);
   end;
   end if;

   select guid;
END

我认为你的问题在于:

WHERE LoginID = loginId
从:

列、索引和存储的例程名称在任何平台上都不区分大小写,列别名也不区分大小写。触发器名称区分大小写,这与标准SQL不同

换言之,该条款可被视为:

where 1 = 1
因为它将选择要删除的所有行

现在我不确定情况是否如此,但这应该很容易确认


只需将所有出现的loginId替换为具有xyzzyLoginId的特定字符组合,然后看看是否可以修复它。

我认为您的问题在于:

WHERE LoginID = loginId
从:

列、索引和存储的例程名称在任何平台上都不区分大小写,列别名也不区分大小写。触发器名称区分大小写,这与标准SQL不同

换言之,该条款可被视为:

where 1 = 1
因为它将选择要删除的所有行

现在我不确定情况是否如此,但这应该很容易确认


只需使用xyzzyLoginId的特定字符组合替换所有出现的loginId,并查看是否修复了它。

在删除之前,您是否可以发布添加SELECT loginId、loginId的输出;在删除之前,您可以发布添加SELECT LoginID的输出,LoginID;非常感谢你,帕斯迪亚布洛!我不能告诉你这对我们有多沮丧。再次感谢!非常感谢你,帕斯迪亚布洛!我不能告诉你这对我们有多沮丧。再次感谢!