2014-02-12 43 views
0

我正在處理腳本以將示例數據安裝到數據庫中。我有一個我編碼的腳本,我稱之爲「通用數據生成器」。這個PHP文件包含了各種函數來生成隨機數據。產生重複結果的隨機函數

實例功能:

// Random number generator. 
function gdg_number($number_start, $number_end) { 

    return rand($number_start, $number_end); 
} 

例子查詢:

function gdg_values($results) { 

    $values = ""; 

    for ($i = 1; $i <= $results; $i++) { 
     $values .= " 
      '" . gdg_sentence(3,12) . "', 
      '" . gdg_multi_paragraphs(1,5,5,8,4,17) . "', 
      '" . gdg_multi_paragraphs(1,5,5,8,4,17) . "', 
      '" . gdg_number(100,900) . "." . gdg_number(00,99) . "', 
      '" . gdg_number(1,20) . "', 
      '" . gdg_number(0,50) . "', 
      '" . gdg_string(10,10) . "', 
      '0' 
     ), ("; 
    } 

    return $values; 
} 

$value = gdg_values(100); 
$values = substr($value, 0, -4); 

我遇到的問題是,當我查看MySQL表後,我用腳本插入多行,我注意到有是重複的數據條目。整行的每列都有相同的值。

什麼可能導致gdg_values()每3行產生相同的結果? (請注意,它這樣做,即使我手動複製/粘貼直接的$values多次進入MySQL查詢。

以下是完整的generic_data_generator.php文件。

http://pastebin.com/jjRF8SZd

這裏是整個products.php文件,該文件是包含在安裝腳本的數據庫,以樣本數據安裝到產品MySQL表。

http://pastebin.com/TtkstXgS

回答

3

截至Is rand() time-dependent in php?說:

注意,自動播種似乎與當前的秒數,這意味着你可以得到一個快速的服務器上運行的幾個相同的結果完成。或者使用更頻繁更改的種子自己調用srand(),或者使用mt_rand(),這似乎不會出現問題。

因此,您可以使用:

function gdg_number($number_start, $number_end) { 
    return mt_rand($number_start, $number_end); 
} 

或者,你可以使用:

function gdg_number($number_start, $number_end) { 
    srand(); 
    return rand($number_start, $number_end); 
} 

這兩者應該更多的時候創建一個不同的隨機值。

1

這不是一個答案,但可能太長的評論。

確保您的文本字段已正確轉義。我不知道你的文本生成函數正在做什麼,但它們的輸出需要通過mysql_real_escape_string運行(實際上,你應該使用mysqli函數)。

您的product_price字段是一個整數,但您輸入一個十進制數。

功能gdg_number不需要,因爲它只是返回rand具有完全相同的參數。關閉該功能並使用rand

使用0而不是00.好吧,它可能沒有區別,但前導0意味着八進制。

+0

感謝您發現該專欄。我決定將十進制列更改爲TINYTEXT。使用PHP更容易處理數字。 –