2

我正在寻找编写 php/mysql 查询以创建唯一用户 ID 的最佳方法,而不是使用 mysql 中的自动增量方法。

例如:Facebook 给用户一长串数字作为用户 ID,然后你才能分配用户名。这串数字可用于查看您的个人资料,或者您可以使用用户名。我希望用户将来能够更改用户名,所以不想根据用户名设计我的系统。

我不知道该网站会有多大,所以请在解决方案中考虑到这一点。如果有很多用户注册,我不想要服务器密集型的东西。

4

4 回答 4

4

对于这样的事情,真的没有最好的路线。本质上,您需要问自己您的系统需要什么。您可以使用电子邮件地址作为 ID、自动递增的数字、MD5 哈希,甚至是重熵 GUID。

请记住,电子邮件地址可能会发生变化,自动递增的数字可以在自动漏洞利用中被利用,并且在技术上存在一些哈希冲突的可能性。

如果您决定使用 PHP 生成高熵 GUID,则可以使用类似uniqid.

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

第二行显示了您可以提供的两个参数;前缀和对更多熵的请求,这将导致更独特的结果。

于 2013-03-09T05:02:29.683 回答
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;

将名称旁边的 UserID 插入 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 ; }
于 2013-03-09T05:11:07.433 回答
0

您可以使用 mysql 作为数据库。Wampserver 结合了一切,让一切变得简单。但是,我不确定我是否可以为您提供很多帮助,因为您的问题非常模糊。请添加更多细节。

于 2013-03-09T04:58:56.483 回答
0

使用 sha 或 md5 之类的 hexdigest 生成类似的 idsha1($uname+$timestamp+$salt)

通过这样做,您将为每个条目存储大量数据,因为 sha1 占用 40 个字节。您已经提到该站点可能会变大,从而产生大量数据。决定它是否值得那么多空间。

PS:你总是可以切片字符串,但碰撞机会更多。

于 2013-03-09T05:10:29.230 回答