2014-04-10 46 views
0

我正在製作一個註冊系統,並且我想檢查用戶選擇的用戶名是否已被使用,如果尚未使用,請將所選用戶名輸入到數據庫中?如何檢查用戶名是否已被使用,如果沒有,請將所選用戶名輸入到MySQL數據庫中?

下面是我的查詢,因爲它是迄今爲止,但我不斷收到語法錯誤。對於記錄:我打算​​使用BindParam()將用戶的PHP輸入綁定到查詢:)

我還有另一個名爲「ID號」的列,它是一個主鍵。

任何幫助如何做到這一點是值得歡迎的!

映入眼簾,

羅穆盧斯


SELECT CASE 
WHEN `Username` != `Username` 

THEN 

INSERT INTO 'T_Users' `Username`, `Password`, `Email` 
VALUES ':username', ':password', ':email' 

END 

FROM `T_Users` 
+1

關懷與我們共享的語法錯誤? 5千種選擇http://stackoverflow.com/search?q=%5Bphp%5D+username+exists –

回答

0

你可以做這樣的事情

<?php 

$query = mysqli_query($con , "SELECT 1 FROM `T_Users` WHERE username = '$username'"); 
if(mysqli_num_rows($query) > 0) { 
    echo "Username is already taken"; 
} else { 
    # Username is available do insert the Data into Database .... 
} 



?> 
+1

這將工作,但會受到競爭條件 - 兩個人試圖在同一用戶名註冊。在這種情況下可能不可能?避免這樣的事情是一種很好的做法,因爲他們將來可能會導致頭痛,因爲沒有樂趣。相信我,我有我的公平份額: -/ –

+0

似乎有用,但「1」代表什麼?對不起,如果我的任何問題看起來很愚蠢,我是SQL和PHP的新手;)@LukeCousins我不認爲我的網站會經常訪問,它在互聯網的一些偏遠角落;) –

+1

無所謂'1'是,這個解決方案只是檢查一行(不打擾行中的內容)。在這種情況下,競爭條件可能不成問題,但如果您正在從事可能讓人們試圖同時做某件事的項目,那麼值得牢記。 –

1

我建議把對用戶名字段的唯一密鑰,並嘗試做一個插入物。然後您可以捕獲錯誤,然後可以知道用戶已經存在。這很好,因爲它不受競爭條件的限制(2個或更多人試圖同時使用相同的用戶名註冊,並且都成功獲得相同的用戶名)。

嘗試類似:

if ($mysqli->query("INSERT INTO `T_Users` (Username, Password, Email) VALUES('xxx', 'xxx', 'xxx')") === TRUE){ 
    echo 'Welcome to the site!'; 
} else { 
    echo 'Username taken'; 
} 
+0

避免兩個人同時嘗試使用相同用戶名註冊的競爭狀態。這是一個小的可能性。 – Matt

相關問題