PHP: генерировать случайную буквенно-цифровую строку, уникальную для значений в таблице phpmyadmin.

Мне нужно сгенерировать случайную буквенно-цифровую строку, уникальную для всех значений в определенном столбце в одной из моих таблиц в phpmyadmin. Кроме того, мне нужно, чтобы он был длиной 20 символов. Уже опубликовано много подобных вопросов, но я не видел ни одного, который нуждался бы в строке, уникальной для столбца в phpmyadmin.

Итак, как бы я сделал это в php?


person Alex Hamilton    schedule 07.10.2013    source источник
comment
Сгенерируйте случайную строку, используя любой из методов в связанных вопросах, проверьте, не используется ли она уже в столбце. Повторяйте, пока не получите тот, который не используется.   -  person Barmar    schedule 07.10.2013
comment
Насколько я знаю, Phpmyadmin не является движком базы данных. Если вы хотите генерировать случайные строки с определенной длиной символов, в Интернете есть много информации об этом. Вам придется каждый раз проверять, является ли это значение уникальным в столбце.   -  person Mark    schedule 07.10.2013


Ответы (3)


Что-то вроде этого:

function isToken($token)
{
    if (isset($token) && $token) {

        //verification values in BD
        $query = "SELECT id FROM table WHERE token='$token'";
        $sql = mysql_query($query);
        if (mysql_num_rows($sql) > 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

function generateUniqueToken($number)
{
    $arr = array('a', 'b', 'c', 'd', 'e', 'f',
                 'g', 'h', 'i', 'j', 'k', 'l',
                 'm', 'n', 'o', 'p', 'r', 's',
                 't', 'u', 'v', 'x', 'y', 'z',
                 'A', 'B', 'C', 'D', 'E', 'F',
                 'G', 'H', 'I', 'J', 'K', 'L',
                 'M', 'N', 'O', 'P', 'R', 'S',
                 'T', 'U', 'V', 'X', 'Y', 'Z',
                 '1', '2', '3', '4', '5', '6',
                 '7', '8', '9', '0');
    $token = "";
    for ($i = 0; $i < $number; $i++) {
        $index = rand(0, count($arr) - 1);
        $token .= $arr[$index];
    }

    if (isToken($token)) {
        return generateUniqueToken($number);
    } else {
        return $token;
    }
}


$uniqueToken = generateUniqueToken(20);
person Sergey Krivov    schedule 07.10.2013
comment
вернуть ложь; // ‹-- забыл точку с запятой - person Dewayne; 23.11.2014

Невозможно автоматически получить уникальные случайные числа в таблице MySQL. Вы должны создать уникальный случайный текст в PHP и найти его в таблице MySQL, и если он существует, сгенерировать его снова.

protected function generateToken($length=6){
    return substr(str_shuffle('abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ1234567890'),rand(0,60-$length),$length);
}
person Surya Sheillendra    schedule 26.11.2014

Я думаю, что мог бы сделать это очень просто:

echo md5(time());
person kapi    schedule 30.07.2016