PHP unikátna identita v url - php

Mám dilemu. Potrebujem jedinečný reťazec v tabuľke databázy, aby som to zobrazil v adresári URL (nezobrazím id v adresári URL).

Chcem generovať vo php jedinečný reťazec skontrolovať, že je jedinečný v tabuľke, ak nie generovať nové.

Čo si myslíte o výkonnosti reťazca s dĺžkou 8 znakov a s veľkým počtom riadkov (asi 100 000 riadkov).

odpovede:

1 pre odpoveď č. 1

Môžete vytvoriť jedinečné ID v php pomocou uniqid(),

Pri vytváraní nového ID skontrolujte databázu DB, či existuje. Ak áno, vytvorte nový. Za predpokladu, že nastavíte index v tomto stĺpci v databáze, tieto kontroly nebudú veľmi drahé.

V pseudo (-ish) kóde:

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

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

1 pre odpoveď č. 2

Namiesto generovania jedinečného kľúča okremid, môžete tiež vytvoriť funkciu, ktorá kóduje id na reťazec. Môžete napríklad konvertovať celé číslo na hexadecimálnu reprezentáciu s 8 znakmi. Môžete to urobiť o niečo zložitejšie, ak sa vám to páči, ale napriek tomu je pomerne ľahké napísať funkciu, ktorá používa pevný vzorec na konverziu čísla na 8 písmen a naopak.Týmto spôsobom nie je potrebné ukladať tieto dodatočné údaje a nemusíte sa obávať jedinečnosti hodnoty.

<?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;

Ponuka