我找寫出一個PHP/MySQL查詢創建最好的方式唯一的用戶ID的,而不是使用自動增量方法在MySQL。創建用戶ID(最佳路線)
例如:Facebook的演唱之前,你可以指定一個用戶名時爲用戶提供了數字作爲用戶ID的長字符串。這串數字可以用來查看你的個人資料,或者你可以使用用戶名。我希望用戶能夠在將來改變用戶名,所以不想來設計基於用戶名我的系統。
我不知道該網站將有多大得到的,所以請考慮到這一點與解決方案。如果有很多用戶註冊,我不想要那些會成爲服務器密集型的東西。
我找寫出一個PHP/MySQL查詢創建最好的方式唯一的用戶ID的,而不是使用自動增量方法在MySQL。創建用戶ID(最佳路線)
例如:Facebook的演唱之前,你可以指定一個用戶名時爲用戶提供了數字作爲用戶ID的長字符串。這串數字可以用來查看你的個人資料,或者你可以使用用戶名。我希望用戶能夠在將來改變用戶名,所以不想來設計基於用戶名我的系統。
我不知道該網站將有多大得到的,所以請考慮到這一點與解決方案。如果有很多用戶註冊,我不想要那些會成爲服務器密集型的東西。
是不是真的有這樣的事情一個最佳路線。基本上你需要問自己你的系統需要什麼。您可以使用一個電子郵件地址作爲ID,自動遞增的編號,MD5哈希值,甚至是沉重的熵GUID。
請記住,電子郵件地址可能會改變,自動遞增的數字可以自動漏洞被利用,而且有技術上哈希碰撞的一些機會。
如果你決定去使用PHP生成一個高熵GUID的路線,你可以這樣做使用功能類似uniqid
。
echo uniqid(); // 513ac40699d85
echo uniqid("_", true); // _513ac3e00bfe46.78760239
第二行示出了兩個參數可以提供;前綴和更多熵的請求,這將產生更獨特的結果。
我喜歡這種方法。有沒有辦法在創建uniqid時避免特殊字符(例如,在第二個示例中,它包含下劃線和句點?) – kdjernigan 2013-03-09 05:11:25
@kdjernigan'_'是我明確請求它的結果,'.'是結果請注意第一行的結果都不是這些字符 – Sampson 2013-03-09 05:12:14
這是比VR17建議的更好的路線嗎?兩者似乎都是不錯的想法。 – kdjernigan 2013-03-09 05:18:58
您可以使用MySQL作爲數據庫。 Wampserver結合了一切,使其變得簡單。但是,我不確定我是否可以幫助你,因爲你的問題非常模糊。請添加更多細節。
我重寫了這個問題。我的意思是寫一個php/mysql查詢來爲用戶創建實際ID的最好方法(類似於facbeook,在分配用戶名前,每個用戶在給定一長串數字作爲ID時) – kdjernigan 2013-03-09 05:00:59
您是否託管該站點或你向別人付錢?如果你付錢,你有沒有訪問FTP服務器? – TheUnCola 2013-03-09 05:02:39
我擁有一家託管公司,所以我擁有該網站的服務器..無需說是我有FTP訪問。 – kdjernigan 2013-03-09 05:08:28
使用類似SHA或MD5一個hexdigest生成一個ID像sha1($uname+$timestamp+$salt)
通過這樣做,你將存儲大量數據的每個條目爲SHA1佔據了40 bytes.You已經提到,該網站可能會變大,使其成爲海量數據。決定它是否值得這麼多空間。
PS:你總是可以切片字符串,但碰撞的機率更是這樣。
您應該遵循一定的算法是這樣的:
在數據庫中輸入新用戶。
//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 ; }
is this or uniqid( )更好的路線? – kdjernigan 2013-03-09 05:19:24
自動增量有什麼問題? – danronmoon 2013-03-09 05:02:13
嗯,我不希望從1開始的號碼(我想用更長的一串數字作爲用戶ID)......是否有可能從更高的AI開始? – kdjernigan 2013-03-09 05:03:59
@kdjernigan你可以通過*改變那個表:'ALTER TABLE users AUTO_INCREMENT = 12345;'來爲MySQL表設置'increment'值。 – Sampson 2013-03-09 05:25:42