2013-01-17 50 views
3

基本上我创建了一个SQL查询来在数据库$i(目前只是为了弄清楚)插入大约5000个随机数。这个PHP While循环脚本有什么问题

我以前试过只用MYSQL做,但失败了,不想再浪费时间了。

它随机产生一个10位数字并交叉检查数字与数组($codes),其中包含来自数据库中不同表格的超过100,000个值。它还将新的随机数添加到新数组($newNumbers),因此它不会创建相同的新数字,然后将数字添加到INSERT查询中。它也有一个嵌套的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 
+3

检查这一行:'$查询= “( '',$兰特,$ RAND 2”) “;'这里解析错误,你有3×'”':) –

+0

谢谢,我稍微简化了查询的发布,我检查了一下,并且在实际上是正确的。 :) – stuckinspace

+0

使用具有语法高亮度的编辑器NetBeans是一个很好的免费选择。 –

回答

0

看起来是这样的,我检查$rand2不是$newNumbers阵列在第一IF语句,其中$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 
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 
1
$query .= " ('', $rand, $rand2")"; 

检查您的报价

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