乙個 SQL 同時驗證帳號是否存在 密碼是否正確

2021-06-03 05:30:32 字數 621 閱讀 6536

出處:

近日偶爾看到乙個很巧妙的 sql 技巧,乙個簡單的 sql 同時驗證帳號是否存在、密碼是否正確。之前從未曾想過這麼做,也未曾見過別人這麼做。雖是奇技淫巧,卻真正所謂構思巧妙。如果用來面試考考別人,真的能夠難倒一大片兄弟。好東西不敢獨享,特公開與大家同樂。

select case when p.encrypted_password =? then 1 else 0 end

and (lower(u.user_sign_in_nm) = ? or lower(u.email) = ?)

解釋:

a. 如果使用者名稱不存在,則查詢結果是無資料

b. 如果使用者名稱存在,而密碼不正確,則返回 0

c. 如果使用者名稱存在,而密碼正確,則返回 1

之所以把密碼單獨用乙個表儲存,是因為使用者的其他資訊(使用者名稱、郵件、**)與密碼是兩種不同性質的東西,系統架構師決定分開儲存,有助於提醒程式設計師這種差別: 使用者的其他資訊可以檢視,密碼不能檢視;使用者的其他資訊更改時可以看到更改前的資料,密碼更改時不能看到更改前的資料;修改使用者密碼與修改使用者其他資訊,是兩個不同頁面。

雖說程式設計師普遍有「文人相輕」的毛病(讀書人互相瞧不起),但看到這個 sql,不能不讓人佩服。

判斷乙個類是否存在

我們在開發的過程中難免會用到低版本中沒有的類,如果我們想讓我們的應用盡可能的相容多個版本,我們需要考慮 如果我們使用的類在低版本中沒有怎麼辦呢。class pkclass nsclassfromstring pkaddpassesviewcontroller if pkclass else nsst...

判斷乙個類是否存在

我們在開發的過程中難免會用到低版本中沒有的類,如果我們想讓我們的應用盡可能的相容多個版本,我們需要考慮 如果我們使用的類在低版本中沒有怎麼辦呢。class pkclass nsclassfromstring pkaddpassesviewcontroller if pkclass else nsst...

查詢乙個檔案是否存在 01

自己翻譯的程式設計百例 測試環境ubuntu 12.04lts 1.finding programs in the path shell指令碼使用環境變數 像mailer 和 pager 會有乙個乙個隱藏的危險,有時候,這些單詞的設定會只指向不存在的程式,例如,如果你決定使用使用pager設定去顯示...