-1

ファイルindex.phpに次のコードがあります。

include('db_connect.php'); //Here's the script that provides mysql connection to a database

$a = round(rand(1,100));
$b = round(rand(160,202));
$c = round(rand(50,110));
$d = round(rand(1,99999));

$sql = "INSERT INTO sInstance (p1,p2,p3,p4) VALUES ('".$a."','".$b."','".$c."','".$d."')";
$result = mysql_query($sql) or die(mysql_error());

明らかに、ランダムに値を生成し、レコードとして MyISAM データベース テーブルsInstanceに挿入します。

問題: ~1000 レコードが生成および挿入された後、(一意の値のセットを使用して) 新しいレコードを生成することはほとんど不可能です。すべての新しいレコードは、古いレコードのクローンです (p1-p2-p3-p4 の値は同じです)。

質問: これを回避し、php に一意のレコードを生成させるにはどうすればよいですか?

手がかり: これは PHP のサーバー側の問題です。おそらく、RAND() 関数を使用して設定された値を何らかの方法でキャッシュします。問題は、ブラウザにも mysql 自体にも関連していません。

4

3 に答える 3

1

何か間違ったことをしていないかどうかはわかりませんが、ランダム シード ジェネレーターをリセットするとうまくいきます。

http://php.net/manual/en/function.srand.php

于 2013-08-28T13:52:35.523 に答える
0

代わりに mt_rand() を試してください。

http://php.net/manual/en/function.mt-rand.php

それでもうまくいかない場合は、データベース スキーマを追加できますか?

于 2013-08-28T13:53:56.287 に答える
0

rand() のシードは、サーバー上の現在のタイムスタンプを使用して行われるため、ランダムな値をすばやく生成すると、ランダムな値を作成するために同じシードが得られる可能性があります。

すぐには発生せず、1000 レコード程度後にのみ発生しますか?

mt_rand()のようなより良い乱数ジェネレーターの使用を検討するかもしれません

于 2013-08-28T13:55:39.153 に答える