0

自動インクリメント「id」を持つテーブルがあります。同じテーブルに「キー」を持つ別の列があり、これは自動インクリメント「id」に基づいています。これにより、「キー」が重複することはありません。できれば6文字の一意のIDジェネレーターが必要です。これはオンラインで見つけましたが、他の提案も受け付けています。

4

2 に答える 2

0
echo $result['id'] . '_' . uniqid('', true);

これにより、1_513c5858c04967.71142475のようなものが生成されます。プレフィックスID_は、もちろんデータベースに基づいて常に一意になります。

それは十分にユニークではありませんか?

ああ、あなたは6文字が欲しいです、どうですか:

function randString($length, $charset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
{
    $str = '';
    $count = strlen($charset);
    while ($length--) {
        $str .= $charset[mt_rand(0, $count-1)];
    }

    return $str;
}

  $key = $result['id'] . '_' . randString(6); //this is unique, cause even you get at a chance of a million that you will get 2 same randString(6); you will have always unique prefix ID_ so you will have 1_G7owOq and 2_G7owOq

  //the code below is just an example of how to loop column for unique key and u dont need it :P just maybe someone else needs it.
  while(mysqli_num_rows(mysqli_query($con, "SELECT id FROM table WHERE key = '".mysqli_real_escape_string($con, $key)."'")) > 0) { 
    $key = $result['id'] . '_' . randString(6); 
  }
于 2013-03-10T09:55:37.893 に答える
0

次に、ここに投稿した最後の方法があります。

$key = randString(6);
while(mysqli_num_rows(mysqli_query($con, "SELECT id FROM table WHERE key = '".mysqli_real_escape_string($con, $key)."'")) > 0) { 
    $key = randString(6); 
}

それは常にランダムな6文字のキーを作成します。これは、データベース内の既存のキーにヒットすると、一意になるまで新しいキーを再作成するためです:]これはあなたにとって最良の方法です。 :]

実際には、既存のすべての一意のキー (62^6) * 6 バイトのテーブルを生成するのが最善の方法です。間違っていなければ (朝) 317 GB :] 1/10000 に達するとは思いませんその :]

于 2013-03-11T08:28:35.197 に答える