0

嘿,我创建了 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 数据库中。但是,无论我将谁添加到数据库中,firstlinksecondLink的 编号始终相同,我不知道为什么要这样做!

两行的数据类型都是INT(15)

4

2 回答 2

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。

于 2013-04-20T02:45:36.613 回答
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 位代码。Is 更简单,更容易理解,用更少的部分组成。必须使用两个 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 注入攻击。通常使用参数化查询。请参阅如何防止 PHP 中的 SQL 注入?有关更多详细信息和示例。
于 2013-04-20T03:01:46.260 回答