2013-03-09 39 views
1

我找寫出一個PHP/MySQL查詢創建最好的方式唯一的用戶ID的,而不是使用自動增量方法在MySQL。創建用戶ID(最佳路線)

例如:Facebook的演唱之前,你可以指定一個用戶名時爲用戶提供了數字作爲用戶ID的長字符串。這串數字可以用來查看你的個人資料,或者你可以使用用戶名。我希望用戶能夠在將來改變用戶名,所以不想來設計基於用戶名我的系統。

我不知道該網站將有多大得到的,所以請考慮到這一點與解決方案。如果有很多用戶註冊,我不想要那些會成爲服務器密集型的東西。

+0

自動增量有什麼問題? – danronmoon 2013-03-09 05:02:13

+0

嗯,我不希望從1開始的號碼(我想用更長的一串數字作爲用戶ID)......是否有可能從更高的AI開始? – kdjernigan 2013-03-09 05:03:59

+2

@kdjernigan你可以通過*改變那個表:'ALTER TABLE users AUTO_INCREMENT = 12345;'來爲MySQL表設置'increment'值。 – Sampson 2013-03-09 05:25:42

回答

3

是不是真的有這樣的事情一個最佳路線。基本上你需要問自己你的系統需要什麼。您可以使用一個電子郵件地址作爲ID,自動遞增的編號,MD5哈希值,甚至是沉重的熵GUID。

請記住,電子郵件地址可能會改變,自動遞增的數字可以自動漏洞被利用,而且有技術上哈希碰撞的一些機會。

如果你決定去使用PHP生成一個高熵GUID的路線,你可以這樣做使用功能類似uniqid

echo uniqid(); // 513ac40699d85 
echo uniqid("_", true); // _513ac3e00bfe46.78760239 

第二行示出了兩個參數可以提供;前綴和更多熵的請求,這將產生更獨特的結果。

+0

我喜歡這種方法。有沒有辦法在創建uniqid時避免特殊字符(例如,在第二個示例中,它包含下劃線和句點?) – kdjernigan 2013-03-09 05:11:25

+1

@kdjernigan'_'是我明確請求它的結果,'.'是結果請注意第一行的結果都不是這些字符 – Sampson 2013-03-09 05:12:14

+0

這是比VR17建議的更好的路線嗎?兩者似乎都是不錯的想法。 – kdjernigan 2013-03-09 05:18:58

0

您可以使用MySQL作爲數據庫。 Wampserver結合了一切,使其變得簡單。但是,我不確定我是否可以幫助你,因爲你的問題非常模糊。請添加更多細節。

+0

我重寫了這個問題。我的意思是寫一個php/mysql查詢來爲用戶創建實際ID的最好方法(類似於facbeook,在分配用戶名前,每個用戶在給定一長串數字作爲ID時) – kdjernigan 2013-03-09 05:00:59

+0

您是否託管該站點或你向別人付錢?如果你付錢,你有沒有訪問FTP服務器? – TheUnCola 2013-03-09 05:02:39

+0

我擁有一家託管公司,所以我擁有該網站的服務器..無需說是我有FTP訪問。 – kdjernigan 2013-03-09 05:08:28

0

使用類似SHA或MD5一個hexdigest生成一個ID像sha1($uname+$timestamp+$salt)

通過這樣做,你將存儲大量數據的每個條目爲SHA1佔據了40 bytes.You已經提到,該網站可能會變大,使其成爲海量數據。決定它是否值得這麼多空間。

PS:你總是可以切片字符串,但碰撞的機率更是這樣。

1

您應該遵循一定的算法是這樣的:

  1. 輸入新用戶到數據庫中。
  2. 獲取記錄ID
  3. 生成用戶ID
  4. 插入用戶ID名稱旁邊的到SQL數據庫。

在數據庫中輸入新用戶。

//get username from previous form 
$user=$_POST['user']; 
// login into mysql server and prepare data for writing 
$connect=mysql_connect('localhost', $user, $pass); 
$selectdb = mysql_select_db('mydb'); 
$query = "insert into users_table set 
username='$user';"; 
$run_query=mysql_query($query); 

獲取記錄ID

$id=mysql_insert_id(); 

生成用戶ID

$first_chars=substr($user, 2); 
$year=date('y'); 
$new_user_id= $first_chars.$year.$id; 

插入用戶名旁邊的名字到SQL數據庫

$query="update users_table set userid='$new_user_id' where id='$id';"; 
$run_query=mysql_query($query); 
if (!$run_query) { 
    echo mysql_error(); 
} 
else { 
    echo 'your user name is '.$user.' and user id is '.$new_user_id ; } 
+0

is this or uniqid( )更好的路線? – kdjernigan 2013-03-09 05:19:24