随机数插入mySQL不起作用

时间:2013-04-20 02:07:41

标签: php mysql random insert int

嘿所有我创建的2个随机数字如下:

 $firstlink = intval(mt_rand(100, 999) . mt_rand(100, 999) . mt_rand(1, 9) . mt_rand(100, 999)); // 10 digit
 $secondLink = intval(mt_rand(1000, 999) . mt_rand(1, 999) . mt_rand(10, 99) . mt_rand(100, 999));

这是我的插入代码:

$result = mysql_query("INSERT INTO userAccount 
                     (Category,Fname,LName,firstlink,secondLink,AccDate) 
                      VALUES (  '" . $cat . "',
                                '" . $fname . "',
                                '" . $lname . "',
                                " . $firstlink . ",
                                " . $secondLink . ",
                                '" . date('Y-m-d g:i:s',time()). "');");

它没有错误,它将数据放入mysql数据库。但是,对于 BOTH firstlink secondLink ,它总是相同的数字,无论我添加到数据库的是谁,我也不知道为什么要这样做!

这两行的数据类型 INT(15)

2 个答案:

答案 0 :(得分:1)

删除intval,一切正常。

$firstlink = mt_rand(100, 999) . mt_rand(100, 999) . mt_rand(1, 9) . mt_rand(100, 999); // 10 digit

32位系统的最大有符号整数范围为-2147483648到2147483647.对于intval,你主要得到2147483647.

答案 1 :(得分:0)

您可以简化代码并改善代码的随机性,如下所示:

$firstlink = mt_rand(10000,99999) . mt_rand(10000,99999);
$secondLink = mt_rand(10000,99999) . mt_rand(10000,99999);

    echo "INSERT INTO userAccount 
                     (Category,Fname,LName,firstlink,secondLink,AccDate) 
                      VALUES (  '" . $cat . "',
                                '" . $fname . "',
                                '" . $lname . "',
                                " . $firstlink . ",
                                " . $secondLink . ",
                                '" . date('Y-m-d g:i:s',time()). "');"

PHPFiddle:http://phpfiddle.org/main/code/6nf-wpk

这将通过制作两个随机的5位数代码并将它们连接在一起来构建随机的10位数代码。更简单,更容易遵循更少的部件组成。它必须用两个mt_rand()来完成,因为可能的最大数量是2147483647.对于你正在使用的每个mt_rand()函数,你要阻止0成为该数字部分的第一个数字,因为你'在1到9之间开始第一个数字。

如果您不关心第一个数字只有1或2(永远不会是3-9或0),您只需使用

$firstlink = mt_rand(1000000000,2147483647);  // random 10 digit number
$secondLink = mt_rand(1000000000,2147483647); // random 10 digit number

作为一般编码提示:

  • 与您如何命名变量一致。您在“$ firstlink”中有一个小写的“L”,在“$ secondLink”中有一个大写“L”。 PHP区分大小写,您最终会使用错误的名称并在程序的其他位置获得意外(空白)结果。
  • 在不防止SQL注入攻击的情况下,请注意不要将任何用户提供的数据放入SQL命令中。使用参数化查询作为规则。有关详细信息和示例,请参阅How can I prevent SQL injection in PHP?