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

标签 php mysql sql database

所以我想做的是为每个新用户生成一个 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/

相关文章:

php - array_search 找不到明显存在的元素

php - 如何动态地将输入字段添加到表单?

mysql - 未注入(inject) Websphere Liberty 18.0.0.3 MySQL 数据源对象

MYSQL查询、优化

sql - 获取Access中特定列为空的所有记录

SQL 到 CoreData,两个或多个属性相乘之和

sql - 使用 EXCEPT,其中 1=0

javascript - 通过 jQuery 发布一个巨大的 html 表单

php - 我可以使用同一张表以不同方式/以更 Cake 的方式重构我的多个用户类型的设置吗?

php - 错误的字符串值 : '\xE8.. &n...' for column