PHP/MySQL - Best way to create unique random string?

后端 未结 10 2118
囚心锁ツ
囚心锁ツ 2020-12-15 04:20

How do I create a random unique string in MySQL?

when I need to create a random string in PHP I use this function:

public function generateString($le         


        
相关标签:
10条回答
  • 2020-12-15 05:01

    Unique random strings can be used as character keys or tokens to identify database records and check to database table and provides Unique key with store $refer_by variable.

    define('DB_SERVER', "localhost");
    define('DB_USER', "root");
    define('DB_PASS', "");
    define('DB_DATABASE', "student");
    $con = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
    
    function refercode()
    {
        $string = '';
        $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
        $max = strlen($characters) - 1;
        for ($i = 0; $i < 6; $i++) {
            $string .= $characters[mt_rand(0, $max)];
        }
        $refer = "select * from user_detail where refer_code = '".$string."' ";
        $coderefertest = mysqli_query($con,$refer);
    
        if(mysqli_num_rows($coderefertest)>0)
        {
            return refercode();
        }
        else
        {
            return $string;
        }
    }
    $refer_by = refercode();
    
    0 讨论(0)
  • 2020-12-15 05:03
    DELIMITER $$
    
    USE `temp` $$
    
    DROP PROCEDURE IF EXISTS `GenerateUniqueValue`$$
    
    CREATE PROCEDURE `GenerateUniqueValue`(IN tableName VARCHAR(255),IN columnName VARCHAR(255)) 
    BEGIN
        DECLARE uniqueValue VARCHAR(8) DEFAULT "";
        WHILE LENGTH(uniqueValue) = 0 DO
            SELECT CONCAT(SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1)
                    ) INTO @newUniqueValue;
            SET @rcount = -1;
            SET @query=CONCAT('SELECT COUNT(*) INTO @rcount FROM  ',tableName,' WHERE ',columnName,'  like ''',@newUniqueValue,'''');
            PREPARE stmt FROM  @query;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        IF @rcount = 0 THEN
                SET uniqueValue = @newUniqueValue ;
            END IF ;
        END WHILE ;
        SELECT uniqueValue;
        END$$
    
    DELIMITER ;
    

    Use this stored procedure and call this stored procedure as

    Call GenerateUniqueValue('tableName','columnName')
    
    0 讨论(0)
  • 2020-12-15 05:07

    I usually use:

    SELECT LEFT(MD5(id), 8)
    

    variants by needings:

    SELECT LEFT(UUID(), 8)
    
    SELECT LEFT(MD5(RAND()), 8)
    
    0 讨论(0)
  • 2020-12-15 05:11

    Assuming 10 characters from the character set a-z, A-Z, 0-9 mean there are (26 + 26 + 10)10 = 8.39299366 × 1017 possible combinations. To calculate the odds of a collision... just 1/x the afore-mentioned number. So I would not be worrying about getting the same string twice. Even if do get the same string again I'll just run the function again in a loop, the only exit condition being that a unique string is found.

    0 讨论(0)
提交回复
热议问题