如何生成 SQL 数据库中不存在的随机整数?

How to generate random integer not present in SQL database?

目前正在开发允许多个用户使用相同用户名的登录脚本。目前的计划是生成一个随机的 "secret" 用户 ID 来代替实际的用户名。那么我将如何生成一个随机整数并检查是否已添加?

这是我对代码的尝试;但是它似乎不起作用,因为它似乎没有做任何事情。

$looptime = 100;

while ($looptime > 0) {
    $userid = rand(0, 999999999);
    $SQL = "SELECT * FROM Accounts WHERE username = '" . $userid . "'";
    $result_id = @mysql_query($SQL) or die("DATABASE ERROR!");
    $total = mysql_num_rows($result_id);

    if (!$total) {
        $looping = 0;
        //CREATE THE ACCOUNT
        mysql_query("INSERT INTO Accounts (id,username,password, email, money, activated) VALUES ('', '$username','$password', '$email', '0', '1')") or die("REGISTER ERROR!"); //1=account activated

        //CONNECTED
        echo "IMCONNECTED";
    }
    $looptime--;
}

编辑:code/number 应该很容易 remember/jot 记在某个地方,因为用户将能够查看它 and/or 记下它以用于帐户恢复目的。

我建议使用 UUID/GUID(不是整数)来最小化冲突的可能性,或者使用标识列(不是随机的)来保证唯一性。是否必须是整数,是否必须是随机的?

这里有一种方法可以做到。在你的数据库中创建一个标量变量函数(类似于下面):

CREATE FUNCTION [dbo].[fn_randomNumber] (@guid nvarchar(128)) 
RETURNS int  AS  
BEGIN       
    SET @guid = REPLACE(@guid, '-', '');
    DECLARE @idInt varchar(Max) = '';

    DECLARE @i INT = 0;
    DECLARE @char VARCHAR;

    WHILE(@i < LEN(@guid))
    BEGIN
        SET @char = (SUBSTRING(@guid, @i, 1));

        IF(ISNUMERIC(@char) = 1)
        BEGIN
            SET @idInt = @idInt + @char;

            IF(LEN(@idInt) = 9)
            BEGIN
                BREAK;
            END
        END

        SET @i = @i + 1;
    END

    RETURN CAST(@idInt as INT);
END
GO

然后执行这个脚本:

SELECT [dbo].[fn_randomNumber] (
   newid())

当然,您需要评估结果以确保它不存在。

您是否在 table 中使用整数作为 ID?您可以将此 ID 附加到用户名。例如:我的用户名1234、我的用户名1245。