2013-03-09 81 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