【发布时间】:2015-03-31 20:33:38
【问题描述】:
我需要生成一个随机数。生成数字后,我需要检查我的表以查看之前是否生成过该数字。如果随机数不是唯一的,我会重新生成这个数字,直到生成一个唯一的数字。
这是我的代码:
$con=mysqli_connect($host,$user,$pass,$database);
$random = rand(1000, 9999);
$result = mysqli_query($con,"SELECT * FROM tablex WHERE randomnumber = '.$random .'");
$num_rows = mysqli_stmt_num_rows ($result);
while ($num_rows > 0) {
$random = rand(1000, 9999);
$num_rows = mysql_num_rows($result);
}
$random = rand(1000, 9999);
我需要知道这个算法是否正确——尤其是。 while 循环。或者还有其他更有效的方法吗?
【问题讨论】:
-
你这样做有什么理由吗?您可以使用主键获取给定行的唯一标识符。
-
您是否考虑过当您获得超过 8999 个条目时会发生什么(当您接近该值时,while 循环将运行越来越长的时间)?如果您需要一个值来确认电子邮件地址,则不必将唯一值作为代码(就像标识符一样) - 它应该有超过 8999 个可能的值。
-
如何使用主键生成唯一的 4 位密钥?是通过 PHPMyAdmin 吗?
-
作为旁注,您应该查看
mt_rand()php.net/manual/en/function.mt-rand.php -
@CodyRaspien - 主键通常已经是唯一的数字了。
标签: php mysql random mysqli while-loop