2015-12-21 93 views
1

我想檢查用戶名和電子郵件是否在我的註冊腳本中。一個查詢,一個表,兩個數()

這是我如何檢查與查詢:

$emailcheck = "SELECT COUNT(email) AS nume FROM members WHERE email = :email"; 
//bindValue 
//execute 
//fetch 
if($rowe['nume'] > 0){ 
$errors[] = "E-mail exist."; 
} 

而且也是我在做同樣的事情的用戶名;

$usercheck = "SELECT COUNT(username) AS numu FROM members WHERE username = :username"; 
//bindValue 
//execute 
//fetch 
if($rowu['numu'] > 0){ 
$errors[] = "Username taken."; 
} 

*

我想往前走一步,並處理所有的東西用一個查詢。

但我不能想出這樣的問題。

我想:

$check = "SELECT COUNT(username) AS numu and COUNT(email) AS nume FROM members WHERE username = :username OR email = :email"; 

,但可能這是荒謬的。

如何處理我想要的一個查詢?

後,我要檢查這樣的:

if($row['numu'] > 0){ 
$errors[] = "Username taken."; 
} 
if($rowe['nume'] > 0){ 
$errors[] = "E-mail exist."; 
} 

因此,這將是更少的代碼,而不是爲第二次兩次bindValue, execute, fetch連接相同的表。

+0

凡(用戶名= usrrname或電子郵件=電子郵件)..嘗試 – devpro

+0

正如你可以看到有我的帖子,我試了一下,先生:) – LetsSeo

+0

不小的差別在一個支架 – devpro

回答

3

你可以做Union All聯合這些查詢:

SELECT COUNT(email) AS num FROM members WHERE email = :email 
UNION ALL 
SELECT COUNT(username) AS num FROM members WHERE username = :username 

然後提取2個根據行。

OR,MySQL允許這事

SELECT 
    (SELECT COUNT(email) FROM members WHERE email = :email) as nume, 
    (SELECT COUNT(username) FROM members WHERE username = :username) as numu 

,如果你想1行2列。

只有當您需要查看哪一個已經存在時才這樣做。否則,只是這樣做:

SELECT 1 FROM members WHERE email = :email OR username = :username LIMIT 1 

是的,可以考慮不做count()因爲你並不需要計算所有行。你只需要停下來,如果你找到一個。因此,要麼做一個LIMITIF EXISTS()

+0

我嘗試了第二塊代碼,它實際上搜索結果所以我爲未來的學習者寫這篇文章,還要感謝'LIMIT'的提示 – LetsSeo

0

你可以指望之間取出and後嘗試這種

$check = "SELECT COUNT(username) AS uname , 
     COUNT(email) AS uemail FROM members 
     WHERE (username = :username OR email = :email)"; 
+0

這看起來和他已經試過的不一樣嗎? – RiggsFolly

+0

這次它告訴我用戶名和電子郵件存在於d atabase,當它們中只有一個存在時。 – LetsSeo

3

我不認爲你真的需要計數。假設您想檢查用戶名或電子郵件是否已存在,因爲它們必須在您的用戶表上唯一,您可以這樣做:

首先,爲數據庫中的每個列添加唯一索引。你可能已經有了這個,但是如果你希望這些值是唯一的,這將確保即使你的PHP代碼由於某種原因不能這樣做。

然後你可以使用此查詢:

SELECT username, email FROM members WHERE username = :username OR email = :email 

這將返回零,一排或兩排,其中:

  • 0 =既不是用戶名,也沒有電子郵件發現
  • 1 =發現有一行有用戶名,電子郵件或兩者都有
  • 2 =在一行中發現用戶名,在另一行中找到電子郵件

然後,您可以遍歷結果,將它們與用戶輸入進行比較,並設置錯誤。

while ($row = //fetch) { 
    if ($row['username'] == $username) { 
     $errors[] = "Username taken."; 
    } 
    if ($row['email'] == $email) { 
     $errors[] = "E-mail exist."; 
    } 
} 
+0

+1,但需要一些提及:當你在數據庫中進行比較時,你可能正在使用通常的CI整理,所以'Alex'='alex'將評估爲true,與PHP相反,比較是二進制。因此,你必須在PHP中處理這個問題,並確保算法與數據庫中的排序規則匹配。 – AlexanderMP