我已經使用準備好的語句在PHP中編寫了一個註冊頁面。我的問題是一個相當簡單的問題。當用戶註冊時,我想確保他們沒有像其他人一樣使用相同的用戶名或電子郵件註冊。因此,作爲驗證過程的一部分,我運行了兩個查詢,一個用於檢查電子郵件是否存在,另一個用於檢查用戶名是否存在。我的問題是,有沒有更好的方法?我覺得運行更多的一個查詢可能會犧牲一些性能。性能甚至會受到這種查詢的影響嗎?我意識到我可以運行"SELECT * FROM table WHERE username = ? or email = ?",
,但我希望用戶知道他們錯了什麼,而不僅僅是一個通用的「您的用戶名或電子郵件目前正在使用,隨時使用試驗和錯誤來找到它」。這可能是我對速度的偏執,但我只是想看看其他人對此事的看法。註冊頁面,電子郵件或密碼存在檢查
回答
用OR運行您的查詢並檢查返回的結果以報告您發現的具體內容。
但是,根據數據庫內部結構和索引,兩個單獨的查詢可能會比OR'更快。你最好對所有案例進行基準測試(找到一個,找到兩個,都沒有發現),以確定你的環境。
啊。因此,而不是僅僅依賴返回的行數,實際分析數據? – Sam
您的查詢是好的;你將有1或2個結果; 2如果只有電子郵件或只有暱稱的註冊存在; 1如果註冊有電子郵件和暱稱;使用JS和輸入字段
目前我正在使用我寫的一個簡單的模板引擎,但是我看到你對JS的觀點。我正在做的事情將有效地做同樣的事情,但在紅色的形式的頂部。希望儘可能明顯。另外註冊表格非常小,只有少數投入。 – Sam
好權寫明原因,我想這將是最簡單的方法:
SELECT IF(username = :username_to_check, 1, 0) AS dup_username
FROM users
WHERE username = :username_to_check OR email = :email_to_check
然後你檢查:1)的行數 - 如果是0,沒有發現重複; 2)您的結果dup_username標誌,如果行數> 0。
這裏的an example與玩。
我不認爲它不好的性能
,如果你有一個從表中獲取一個行選擇查詢;可以說成千上萬的行;那麼影響是不是在所有提到..
什麼影響你的表現是加入哪個需要大量這是不是在你的情況下發生的資源查詢...
我相信它的安全使用它分開,我們一直在我們的網站上這樣做目前有超過一百萬用戶
也試圖在你的mysql服務器上運行這個查詢,看看它可以幫助多長時間(特別是對於更復雜的查詢)
$result = mysql_query("SELECT * FROM table1 WHERE Username = ''", $link);
$num_rows = mysql_num_rows($result);
$result2 = mysql_query("SELECT * FROM table1 WHERE Email= ''", $link);
$num_rows2 = mysql_num_rows($result2);
$checkUsrN = false;
$checkEmail = false;
$mesg = "The following is bad: ";
if($num_rows == 0)
{
$checkUsrN = true;
}
else{
$mesg .= "Username";
}
if($num_rows2 == 0)
{
$checkEmail = true;
}
else{
$mesg .= "Email";
}
if($checkUsrN == false || $checkEmail == false)
{
echo $mesg;
break;
}
怎麼樣爲了你的目的?
- 1. PHP註冊信息:檢查電子郵件是否存在
- 2. mysqli的註冊腳本,檢查用戶或電子郵件exsist
- 3. 在iOS中使用電子郵件和密碼註冊
- 4. Joomla電子郵件註冊
- 5. 檢查一些電子郵件地址是否在gravatar註冊?
- 6. 註冊時通過電子郵件發送密碼
- 7. 用戶註冊體驗:電子郵件生成密碼?
- 8. Django用戶註冊 - 通過電子郵件重置密碼
- 9. 忘記密碼發送到Android的註冊電子郵件
- 10. 使用用戶,電子郵件和密碼進行Firebase註冊
- 11. 電子郵件存在檢查軟件
- 12. 通過電子郵件或手機號碼設計註冊
- 13. 郵戳應用與色器件 - 註冊和忘記密碼的電子郵件
- 14. symfony2註冊/檢查電子郵件模板
- 15. 檢查電子郵件註冊的可用性asp.net + jquery
- 16. 在Dotnetnuke註冊確認電子郵件
- 17. 檢查電子郵件已經存在
- 18. 檢查電子郵件是否存在
- 19. 檢查電子郵件憑據存在
- 20. 檢查電子郵件是否存在或不在jquery
- 21. 檢查電子郵件Id是否存在或在PHP
- 22. 用CasperJS或PhantomJS檢查電子郵件
- 23. 如何在註冊後發送用戶名和密碼到電子郵件ID
- 24. JSF XHTML註冊表格密碼檢查
- 25. 不允許「假電子郵件」註冊
- 26. MVC 3註冊確認電子郵件
- 27. 註冊表單(驗證電子郵件)
- 28. Laravel電子郵件註冊確認
- 29. ArgumentError:序列未註冊:電子郵件
- 30. 電子郵件註冊多個列表
您可以單獨檢查它們,但它對性能不利。 – Leri
你能否證明你在說什麼?編輯:不要吝嗇,只是想知道爲什麼它更慢。是否因爲我連接到MySQL兩次?它有效地花費兩倍的時間嗎? – Sam
如果此查詢返回1,您可以首先運行query'select * from username where =?',所以用戶名已被使用。如果它返回0注意它你可以檢查電子郵件。這對性能不利,因爲您必須運行2個查詢而不是1個查詢。 – Leri