所以我想做的是为每个新用户生成一个 ID。这将是独一无二的。
function generateRandomString($length = 8) {
$characters = '0123456789';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
现在这是我总共要做的事情
//Generate truly unique ID
function generateRandomString($length = 8) {
$characters = '0123456789';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
$unid = generateRandomString();
//Check if ID OG
$idog = $con->prepare("SELECT * FROM users WHERE user_id = :uid");
$idog->bindValue(':uid', $unid);
$idog->execute();
//Loop if ID not OG
while ($idog->rowCount() > 0) {
function generateRandomString($length = 8) {
$characters = '0123456789';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
}
$unid = generateRandomString();
现在我假设只要 ID 被获取,这就会一直循环。我无法测试它,只是因为这需要一段时间。所以基本上我的问题是,逻辑正确吗?会一直循环直到生成新的ID吗?有没有更有效的方法来做到这一点?
最佳答案
是否有理由需要使用随机字符串作为 id?既然您标记了 mysql,我假设这是您的数据库,那么为什么不将用户插入表中,然后执行此查询“SELECT LAST_INSERT_ID()”。这假设“id”列是“AUTO_INCRMENT”值。请注意,您需要将插入和对事务中最后插入的 id 的调用包装起来,以保证返回的 id 来自您刚刚执行的插入。
我知道你的问题是你的逻辑是否正确,但感觉好像你试图在这里重新发明轮子。使用已经提供给您的数据库的功能。
关于php - 不确定循环时逻辑是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343381/