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