随机函数产生重复结果

时间:2014-02-12 23:49:33

标签: php

我正在编写一个脚本来将示例数据安装到数据库中。我有一个我编写的脚本,我称之为“通用数据生成器”。这个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

2 个答案:

答案 0 :(得分: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 :(得分:1)

这不是一个答案,但可能对评论来说太长了。

确保您的文字字段已正确转义。我不知道你的文本生成函数在做什么,但是它们的输出需要通过mysql_real_escape_string运行(实际上,你应该使用mysqli函数)。

您的product_price字段是整数,但您输入的是十进制数。

函数gdg_number不需要,因为它只返回具有完全相同参数的rand。杀死该功能,只需使用rand

使用0而不是00.好吧,它可能没有区别,但前导0表示八进制。