2017-09-04 94 views
1

你好,在一个测试数据库中,我只有一个表customer.I已经创建了一个存储过程来做一些工作。每次我在数据库中执行此查询用select count语句存储的MySql变量总是返回1

select count(*) from Customer where Email= .... 

,我收到了数0,但在我的存储过程的结果始终是1,没有任何error.This是我的存储过程中的代码。

BEGIN 
    START TRANSACTION; 
    SET @var=(select count(*) from Customer where Email=email); 
    select @var; 
    if (@var>0) then 
    update Customer Set Password=temppass,TemporaryPassword=temppass where 
    Email=email; 
    COMMIT; 
    ELSE 
    ROLLBACK; 
    END IF; 
    END 

有什么想法吗?谢谢!

回答

1

问题是您的情况Email = email。这总是会是真的 - 因为email的两个引用都指的是同样的东西,表格中的email列。

以不同的名称调用该变量。我经常使用后缀v_,所以where customer.email = v_email

这么说,我觉得你可以这样做:

begin 
    update Customer c 
     set c.Password = v_temppass, 
      c.TemporaryPassword = v_temppass 
    where c.email = v_email; 
end; 

我看不到交易提供了什么样的价值。

我假设你没有将密码存储为明文。如果你关心安全性和访问性,那绝对是一个不错的选择。

+0

它的工作!顺便说一下密码加密,因为我真的很关心安全和access.Thank你非常! – srv8