2010-02-03 72 views
0

我編寫登錄過程,用戶可以給用戶名或emailid登錄和密碼。我的程序是這樣的SQLServer用戶登錄中的存儲過程

create procedure users_login (@username varchar(50),@password varchar(50), 
    @emailid varchar(50),@ret int output) 
as 
    begin 
     select username,password,emailid from users where username=isnull(@username,null) or 
     emailid=isnull(@emailid,null) and [password][email protected] 
     if(@@rowcount >0) 
      begin 
       set @ret=1 
      end 
     else 
      begin 
       set @ret=0 
      end 
    end 

是確定或修改任何有

+1

「那是正確的」 - 你有什麼要求? – 2010-02-03 06:45:06

+0

Mr.Mitch登錄頁面中有兩個文本框,其中一個用於 suername,第二個用於密碼。在firsttextbox用戶可以給用戶名或emailid登錄 – 2010-02-03 06:47:45

回答

2

在查詢本身有問題,你需要把括號圍繞or聲明,否則該語句將總是返回一行時的用戶名匹配的表:

SELECT username,password,emailid 
FROM users 
WHERE (username=isnull(@username,null) or emailid=isnull(@emailid,null)) 
     and [password][email protected] 

其次,你不該不會以明文形式存儲密碼。請看這樣article on how to salt and hash your passwords

至於風格,我個人不會這樣做。正如其他人指出的,在這種情況下isnull()與不使用它相同。您也可以通過在select語句中設置@ret來簡化@@ rowcount的使用。如果它沒有返回行,那麼它將不會被設置,因此它會達到相同的目的。

所以我把它寫成:

create procedure users_login (
           @username varchar(50), 
           @password varchar(50), 
           @emailid varchar(50), 
           @ret int output 
          ) 
as 
    begin 
     set @ret=0 
     select @ret=1 
     from users 
     where (username=isnull(@username,null) or emailid=isnull(@emailid,null) 
      and [password][email protected] 
    end 
+0

您好安德魯考克斯先生我把括號圍繞or和你說的@@ rowcount我不明白這一點。我檢查選擇語句包含行,如果包含@@ rowcount將retun integer.if它包含一個值更大比零,然後我設置@ret = 1 – 2010-02-03 07:11:21

+0

我已更新與我的版本 – 2010-02-03 08:41:15

+0

答案好的謝謝安德魯考克斯先生謝謝我要寫這樣只 – 2010-02-03 08:46:28

0

我不是一個SQL大師,所以有人可以告訴我什麼?

isnull(@username,null) 

。 ..是爲了完成?對我來說,這是equivelant @username



這是的Transact-SQL?難道你不能通過對@ret使用INSERT INTO語法並插入返回的行的COUNT來縮小SQL嗎?



你逃跑的用戶名,電子郵件和使用它與SQL之前從您的網站哈希密碼?

+0

它什麼都不做!即如果@username爲NULL,它將返回NULL – 2010-02-03 06:58:27

+0

Mr. taspeotis爲什麼,因爲如果用戶只能給用戶名,那麼emailid會給出錯誤,那就是爲什麼put isnull。如果用戶提供用戶名,則emailid將爲空。爲什麼是錯的先生taspeotis – 2010-02-03 06:59:10

+0

我以爲它什麼也沒做。我希望你沒有使用它逃脫? – 2010-02-03 07:01:07

相關問題