3

基本上,我创建了一个 SQL 查询以在数据库中插入大约 5000 个随机数$i(目前是 10 个只是为了弄清楚)。

我以前尝试只在 MYSQL 中完成,但失败了,不想再浪费时间了。

它随机化一个 10 位数字,并与数组 ( $codes) 交叉检查该数字,该数组包含来自数据库中不同表的超过 100,000 个值。它还将新的随机数添加到新数组 ( $newNumbers) 中,因此它不会生成相同的新数字,然后将这些数字添加到 INSERT 查询中。它还有一个嵌套while循环来创建第二个数字,它也必须是完全唯一的。

希望这是有道理的..无论如何,问题似乎出在嵌套的 while 中,它似乎是无限循环(而不是增加$i),但我不知道为什么。

$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";

$i = 0;
while ($i <= 10){

    $rand = mt_rand(1000000000, 9999999999);
    if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
        $newNumbers[] = $rand;

        $second = 0;
        while ($second == 0){
            $rand2 = mt_rand(1000000000, 9999999999);
            if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                $query .= " ('', $rand, $rand2)";
                $newNumbers[] = $rand2;
                $second = 1;

                $i++;
            }else
                $duplicates ++;
        }//end second loop



    }else
        $duplicates ++;
}//while
4

4 回答 4

2
$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";

$i = 0;
while ($i <= 10){

    $rand = mt_rand(1000000000, 9999999999);
    if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
        $newNumbers[] = $rand;

        $second = 0;
        while ($second == 0){
            $rand2 = mt_rand(1000000000, 9999999999);
            if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                $query .= " ('', $rand, $rand2)";//missing quotes
                $newNumbers[] = $rand2;
                $second = 1;

                $i++;
            }else
                $duplicates ++;
        }//end second loop



    }else
        $duplicates ++;
}//while
于 2013-01-17T11:40:43.287 回答
1
$query .= " ('', $rand, $rand2")"; 

检查你的报价

于 2013-01-17T11:40:50.937 回答
0

你的行中有一个无关紧要的"角色$query .= " ('', $rand, $rand2")";。您应该按如下方式修改代码:

$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";

$i = 0;
while ($i <= 10){

    $rand = mt_rand(1000000000, 9999999999);
    if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
        $newNumbers[] = $rand;

        $second = 0;
        while ($second == 0){
            $rand2 = mt_rand(1000000000, 9999999999);
            if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                $query .= " ('', $rand, $rand2)";
                $newNumbers[] = $rand2;
                $second = 1;

                $i++;
            }else
                $duplicates ++;
        }//end second loop



    }else
        $duplicates ++;
}//while
于 2013-01-17T11:41:32.897 回答
0

所以我似乎在检查第一个 IF 语句$rand2中的数组是否不在$newNumbers数组中,在第一个循环之后$i,每次$rand2都会$newNumbers出现,因为它不会重新生成,因此是无限循环。

还要感谢大家发现带有额外引号的解析错误,我在 TextWrangler 中纠正了它(顺便说一句,这是史诗般的),但在简化发布查询时出错。

if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){

$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";

$i = 0;
while ($i <= 10){

    $rand = mt_rand(1000000000, 9999999999);
    if (!in_array($rand, $codes) && !in_array($rand, $newNumbers) ){
        $newNumbers[] = $rand;

        $second = 0;
        while ($second == 0){
            $rand2 = mt_rand(1000000000, 9999999999);
            if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                $query .= " ('', $rand, $rand2)";
                $newNumbers[] = $rand2;
                $second = 1;

                $i++;
            }else
                $duplicates ++;
        }//end second loop



    }else
        $duplicates ++;
}//while
于 2013-01-17T12:13:21.587 回答