我正在寻找编写 php/mysql 查询以创建唯一用户 ID 的最佳方法,而不是使用 mysql 中的自动增量方法。
例如:Facebook 给用户一长串数字作为用户 ID,然后你才能分配用户名。这串数字可用于查看您的个人资料,或者您可以使用用户名。我希望用户将来能够更改用户名,所以不想根据用户名设计我的系统。
我不知道该网站会有多大,所以请在解决方案中考虑到这一点。如果有很多用户注册,我不想要服务器密集型的东西。
对于这样的事情,真的没有最好的路线。本质上,您需要问自己您的系统需要什么。您可以使用电子邮件地址作为 ID、自动递增的数字、MD5 哈希,甚至是重熵 GUID。
请记住,电子邮件地址可能会发生变化,自动递增的数字可以在自动漏洞利用中被利用,并且在技术上存在一些哈希冲突的可能性。
如果您决定使用 PHP 生成高熵 GUID,则可以使用类似uniqid
.
echo uniqid(); // 513ac40699d85
echo uniqid("_", true); // _513ac3e00bfe46.78760239
第二行显示了您可以提供的两个参数;前缀和对更多熵的请求,这将导致更独特的结果。
你应该遵循这样的算法:
将新用户输入数据库。
//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 ; }
您可以使用 mysql 作为数据库。Wampserver 结合了一切,让一切变得简单。但是,我不确定我是否可以为您提供很多帮助,因为您的问题非常模糊。请添加更多细节。
使用 sha 或 md5 之类的 hexdigest 生成类似的 idsha1($uname+$timestamp+$salt)
通过这样做,您将为每个条目存储大量数据,因为 sha1 占用 40 个字节。您已经提到该站点可能会变大,从而产生大量数据。决定它是否值得那么多空间。
PS:你总是可以切片字符串,但碰撞机会更多。