如果结果匹配数据库条目,则在php中刷新rand()

时间:2017-12-30 21:17:23

标签: php mysql

我有一个数据库,其中包含与标识每行的条形码相关的数字。条形码列是唯一的,也是主键。

在我的网站注册后,我希望生成一个随机数字串并存储在条形码字段中。 Currectly我正在使用此命令生成字符串>

$barcode = mt_rand(100000, 999999).mt_rand(100000, 999999);

然后我用它来检查条目是否存在>

$resultbarcode = $mysqli->query("SELECT * FROM users WHERE barcode='$barcode'") or die($mysqli->error());

然后使用If语句>

if ( $resultbarcode->num_rows > 0 ) {


}

我检查返回的行是否大于0.如果是这样,我想刷新$ barcode变量,直到没有结果。

可以这样做,还是我应该在一个单独的.php文档中使用$ barcode并将其调用到这个文件中?

2 个答案:

答案 0 :(得分:3)

不要折磨您糟糕的数据库垃圾邮件查询,以查看您刚刚创建的条形码是否已经存在于迭代中。使用单个查询将所有现有条形码提取到数组中,然后使用in_array function检查其上的全新条形码。它会更快......更健康:

$mysqli->query("SELECT DISTINCT barcode FROM users") or die($mysqli->error());
$barcodes = $mysqli->fetch_array(MYSQLI_NUM);

do 
{
    $barcode = mt_rand(100000, 999999).mt_rand(100000, 999999);
}
while (in_array($barcode, $barcodes));

或者,因为在数据库端,您的用户应该与唯一ID相关联,找到一个根据该值生成唯一条形码的算法。

答案 1 :(得分:1)

您的问题可以通过do-while循环来解决:do-while documentation

do {
    $barcode = mt_rand(100000, 999999).mt_rand(100000, 999999);
    $resultbarcode = $mysqli->query("SELECT * FROM users WHERE barcode='$barcode'") or die($mysqli->error());
} while ( $resultbarcode->num_rows > 0);

//$barcode will be an unique barcode now.

与普通while循环相比,do-while循环将首先执行第一次迭代,然后评估条件。