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

时间:2014-08-16 19:52:10

标签: 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之前,它会继续循环吗?有没有更有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

您是否有理由需要随机字符串作为ID?既然您标记了mysql,我假设这是您的数据库,那么为什么不将用户插入表中然后执行此查询“SELECT LAST_INSERT_ID()”。这假设“id”列是“AUTO_INCREMENT”值。注意,您需要在事务中包装插入和调用最后插入的id,以保证返回的id来自您刚刚执行的插入。

我意识到你的问题是你的逻辑是否正确,但感觉好像你正试图在这里重新发明轮子。使用已经提供给您的数据库的功能。