-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

rand() 的播种使用服务器上的当前时间戳进行,因此当您快速生成随机值时,您可能会获得相同的种子来创建随机值。

您确定它不会立即发生,并且仅在 1000 条左右的记录之后发生吗?

您可以考虑使用更好的随机数生成器,例如mt_rand()

于 2013-08-28T13:55:39.153 回答
0

请改用 mt_rand()。

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

如果这不起作用,您可以添加数据库架构吗?

于 2013-08-28T13:53:56.287 回答