2013-04-20 96 views
0

嘿,我的全部創建像2個隨機數字,所以:隨機數插入MySQL的不工作

$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()). "');"); 

它沒有errrs並且它把數據進入mysql數據庫。然而,其始終相同的號碼爲BOTH第一鏈接第二鏈接無論我加入數據庫誰,我不知道爲什麼它這樣做!

數據類型爲兩行是INT(15)

+0

在兩種情況下,'$ firstlink'或'$ secondLink'都插入了哪個數字? – 2013-04-20 02:20:56

+0

@ArmanH我得到了** 2147483647 ** – StealthRT 2013-04-20 02:52:54

回答

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?
1

刪除INTVAL一切都會正常工作。

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

32個系統具有-2147483648到2147483647最大符號整數範圍有了你有2147483647 INTVAL居多。

+0

那麼我需要設置什麼數據類型纔能有10位以上的數字? Will ** BIGINT **會不夠好? – StealthRT 2013-04-20 02:51:08

+0

對於mysql int(15)就可以了。 – Jack 2013-04-20 02:52:37

+0

但我經常得到** 2147483647 **,所以它看起來太大了一些? – StealthRT 2013-04-20 02:53:30