Ich versuche, eine 12-Zeichen-ID für Artikel auf meiner Website zu erstellen, ähnlich wie youtube seine Video-ID handhabt ( http://www.youtube.com/watch?v=53iddd5IcSU ). Im Moment generiere ich einen MD5-Hash und greife dann wie folgt auf 12 Zeichen zu:
$ArticleId = substr(MD5("Article".$currentID),10,12)
wobei $currentID die numerische ID aus der Datenbank ist (z. B. 144)
Ich bin etwas paranoid, dass ich in eine doppelte $ArticleId laufen, aber realistisch, was sind die Chancen, dass dies geschehen wird? Und da die Spalte in meiner Datenbank eindeutig ist, wie kann ich dieses seltene Szenario behandeln, ohne dass ein hässlicher Fehler ausgelöst wird?
P.S. Ich habe ein kleines Skript erstellt, um innerhalb der ersten 5000 $ArticleId's nach Duplikaten zu suchen und es gab keine.
EDIT: Ich mag es nicht, wie die base64_encode Hashes aussehen, also habe ich dies getan:
function retryAID($currentID)
{
$AID = substr(MD5("Article".$currentID*2),10,12);
$setAID = "UPDATE `table` SET `artID` = '$AID' WHERE `id` = $currentID ";
mysql_query($setLID) or retryAID($currentID);
}
$AID = substr(MD5("Article".$currentID),10,12);
$setAID = "UPDATE `table` SET `artID` = '$AID' WHERE `id` = $currentID ";
mysql_query($setAID) or retryAID($currentID);
Da die AID-Spalte eindeutig ist, wird die mysql_query einen Fehler auslösen und die Funktion retryAID wird eine eindeutige ID finden...