不确定循环时逻辑是否正确


Not sure if logic is correct when looping

我要做的是为每个新用户生成一个ID。它将是独一无二的。S

    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_INCREMENT"值。注意,您需要包装插入和对事务中最后插入的id的调用,以保证返回的id来自您刚刚执行的插入。

我知道你的问题是你的逻辑是否正确,但感觉你好像在重新发明轮子。使用已经提供给您的数据库的特性