2013-01-17 89 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