2

mysqlのautoincrementメソッドを使用するのではなく、php/mysqlクエリを書き出して一意のユーザーIDを作成するための最良の方法を探しています。

例:Facebookは、ユーザー名を割り当てる前に、歌うときにユーザーIDとして長い数字の文字列をユーザーに提供します。この数字の文字列を使用してプロファイルを表示したり、ユーザー名を使用したりできます。将来、ユーザーがユーザー名を変更できるようにしたいので、ユーザー名に基づいてシステムを設計したくありません。

サイトがどれだけ大きくなるかわかりませんので、ソリューションでそれを考慮してください。多数のユーザーがサインアップしている場合、サーバーを集中的に使用するようなものは必要ありません。

4

4 に答える 4

4

このようなものに最適なルートは実際にはありません。基本的に、システムに何が必要かを自問する必要があります。電子メールアドレスをID、自動インクリメントされた番号、MD5ハッシュ、またはヘビーエントロピーGUIDとして使用できる場合があります。

電子メールアドレスが変更される可能性があり、自動インクリメントされた数値が自動化されたエクスプロイトで利用される可能性があり、技術的にはハッシュが衝突する可能性があることに注意してください。

PHPを使用して高エントロピーGUIDを生成する方法を選択した場合は、のような関数を使用して行うことができますuniqid

echo uniqid(); // 513ac40699d85
echo uniqid("_", true); // _513ac3e00bfe46.78760239

2行目は、指定できる2つの引数を示しています。プレフィックス、およびより多くのエントロピーの要求。これにより、よりユニークな結果が得られます。

于 2013-03-09T05:02:29.683 に答える
1

次のようなアルゴリズムに従う必要があります。

  1. 新しいユーザーをデータベースに入力します。
  2. レコードIDを取得する
  3. ユーザーIDを生成します
  4. 名前の横にあるuserIDをSQLデータベースに挿入します。

新しいユーザーをデータベースに入力します。

//get username from previous form
$user=$_POST['user'];
// login into mysql server and prepare data for writing
$connect=mysql_connect('localhost', $user, $pass);
$selectdb = mysql_select_db('mydb');
$query = "insert into users_table set
username='$user';";
$run_query=mysql_query($query);

レコードIDを取得する

$id=mysql_insert_id();

ユーザーIDを生成します

$first_chars=substr($user, 2);
$year=date('y');
$new_user_id= $first_chars.$year.$id;

名前の横にあるUserIDをSQLデータベースに挿入します

$query="update users_table set userid='$new_user_id' where id='$id';";
$run_query=mysql_query($query);
if (!$run_query) {
   echo mysql_error();
}
else {
   echo 'your user name is '.$user.' and user id is '.$new_user_id ; }
于 2013-03-09T05:11:07.433 に答える
0

mysqlをデータベースとして使用できます。Wampserverはすべてを組み合わせて、簡単にします。しかし、あなたの質問は非常に曖昧なので、私があなたを大いに助けることができるかどうかはわかりません。詳細を追加してください。

于 2013-03-09T04:58:56.483 に答える
0

shaやmd5などのhexdigestを使用して、次のようなIDを生成しますsha1($uname+$timestamp+$salt)

これを行うと、sha1が40バイトを使用するため、エントリごとに大量のデータが保存されます。サイトが大きくなり、大量のデータになる可能性があることはすでに説明しました。その容量の価値があるかどうかを判断します。

PS:いつでも文字列をスライスできますが、衝突の可能性はそれ以上です。

于 2013-03-09T05:10:29.230 に答える