PHP уникална идентификационна област в url - php

Имам дилема. Имам нужда от уникален низ в таблицата на базата данни, за да я покажа в URL адреса (не показвам id в URL адреса).

Искам да генерирам в php уникален низ проверете дали е уникален в таблицата, ако не генерира нов.

Какво мислите по отношение на ефективността за низ с дължина 8 знака и с голям брой редове (около 100 000 реда).

Отговори:

1 за отговор № 1

Можете да създадете уникален идентификационен номер в php uniqid(),

Когато генерирате нов идентификационен номер, проверете дали той съществува. Ако е така, създайте нова. Ако приемем, че сте настроили индекс на тази колона в базата данни, тези проверки няма да бъдат много скъпи.

В псевдо (-ish) код:

while (true) {
$id = uniqid();

if (!id_exists_in_db($id)) // we have a unique id
break;
}

1 за отговор № 2

Вместо да генерирате уникален ключ освенid, можете също така да създадете функция, която изтрива или кодира идентификационния номер на низ. Например, можете да конвертирате цяло число в 8 символно изображение на шестнадесетичен знак. Можете да го направите малко по-сложно, ако искате, но все пак е доста лесно да напишете функция, която използва фиксирана формула, за да превърнете числото в 8 букви и обратно. По този начин не е нужно да съхранявате тези допълнителни данни и не трябва да се безпокоите, че стойността е уникална.

<?php

function translate($key, $back)
{
$key = str_pad($key, 8, "0", STR_PAD_LEFT);
$a = array("1","2","3","4","5","6","7","8","9","0");
$b = array("a","b","c","d","e","f","g","h","i","j");
if ($back) {$c = $b; $b = $a; $a = $c;}
return str_replace($a, $b, $key);
}

function encode_id($int)
{
return translate($int, false);
}

function decode_id($key)
{
return (int)translate($key, true);
}

$key = encode_id(40000);
$int = decode_id($key);
echo $key;
echo "<br>";
echo $int;

Свързани въпроси
Най - известен