本当に本当に主キーを暗号化したい場合 (非常に非効率的です。後で説明します) を使用します。
$url = substr(md5(uniqid($row['id'], true)),0,6);
行['id'] は主キーです。これにより、url/html セーフの 6 文字の文字列が作成され、すべてが一意になります (以下を参照)。
今。これが、これを行うべきではない理由です。
- クライアント側ではなく、SQL データベースにデータをアップロードするときは、常にバックエンドで暗号化を行う必要があります。一般的なルールは、クライアント側の処理が少ないほど良いということです。$row['id'] がキーである SQL データベースから $row['url'] をプルするか、ID をプルしてから暗号化を実行するかの違いは、クライアント側です。これにより、クライアント側にさらに 1 つのステップが追加されます。
- 可能性は非常に低いですが、以下のような暗号化を使用すると、重複が発生する可能性があります。(サイトに 1000 以上のキーがある場合、重複の可能性が高くなります) したがって、重複を防ぐには、キーを暗号化する必要があります。次に、SQL 検索を実行してすべてのキーを取得し、各キーを暗号化し、すべてのキーを比較します現在の暗号化されたキー。これにより、処理時間が 4 倍になります (キーの数に関係なく)。
- 本当に形が悪いだけです。暗号化された URL に基づいてページを検索したいという永遠の理由がある場合は、すべてのキーを再度取得し、それらすべてを暗号化して比較する必要があります。
他のすべての人にとって、効率が必要な場合はこれを使用してください
一意のIDを作成するスクリプトがあります
$token = substr(md5(uniqid(rand(), true)),0,6); // creates a 6 digit token
以前に使用した ID を格納するために mysql データベースを使用していますが、他の種類のデータベースを使用して ID を格納することもできます。
function generateUniqueID () {
$token = substr(md5(uniqid(rand(), true)),0,6); // creates a 6 digit token
$query = "SELECT count(*) FROM table WHERE url = $token";
$result = mysql_query($query, $connection) or die(mysql_error());
$numResults = mysql_num_rows($result);
if ($numResults) {
generateUniqueID();
}
}
このコードを使用すると、クライアント側で1つのステップがあり、idの行を取得してから行['rl']を受け取ります。
プログラムの効率性についてよく読み、 mysqlのドキュメントを参照してください。そうすれば、より多くのクライアントを満足させることができます :)