URLのPHPの一意のフィールド - PHP

私にはジレンマがあります。私は私のデータベーステーブルにURLを表示するためにユニークな文字列が必要です(私はURLにidを表示しません)。

私は、PHPでユニークな文字列のチェックを生成する必要がありますそれはテーブル内で一意である場合は、新しいを生成しません。

長さが8文字で、行数が多い(約100,000行)文字列のパフォーマンスに関してどう思いますか?

回答:

回答№1は1

あなたはPHPで一意のIDを作成することができます uniqid()

新しいIDを生成する場合は、DBが存在するかどうかを確認してください。そうであれば、新しいものを作成します。 データベースのその列にインデックスを設定すると仮定しますこれらの小切手はあまり高価ではありません。

擬似(-ish)コードでは:

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

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

回答№2の場合は1

それ以外の固有のキーを生成する代わりに、idを文字列にハッシュまたはエンコードする関数を作成することもできます。たとえば、整数を8文字の16進表現に変換できます。あなたは好きなだけもっと複雑にすることができますが、固定式を使って数字を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;

メニュー
最も人気のある