【问题标题】:Generate a random 10 digit number and insert into mysql?生成一个随机的 10 位数字并插入到 mysql 中?
【发布时间】:2014-04-29 11:07:59
【问题描述】:

我正在尝试生成一个随机的 10 位数字并在页面加载时将其插入到 mysql 中,因此每次页面刷新或加载时应该有一个不同的 10 位数字被插入到数据库中,但是目前它只是不断插入相同的 10 位数字。

谁能告诉我哪里出错了?谢谢。

<?php
    session_start();
    $db_hostname = 'localhost';
    $db_database = 'hewden1'; 
    $db_username = 'root';
    $db_password = '';
    $db_server = mysql_connect($db_hostname, $db_username, $db_password)    
            or die("Unable to connect to MySQL: " . mysql_error());
    mysql_select_db($db_database)   
    or die("Unable to select database: " . mysql_error());

    $num0 = (rand(10,100));
    $num1 = date("Ymd");
    $num2 = (rand(100,1000));
    $num3 = time();
    $randnum = $num0 . $num1 . $num2 . $num3;


    $sql="INSERT INTO supplier_session (session_number)
    VALUES ('$randnum')";

    $result = mysql_query($sql); 
    ?>

这是我不断收到的号码:2147483647

【问题讨论】:

  • 插入的数字是多少?此外,如果您只想要一个会话 ID,请使用 session_id ..
  • 没有错误,因为我说代码正在工作,它插入一个 10 位数字,我只是希望它每次都是不同的数字,而不是每次都是相同的数字,这就是我目前的情况得到
  • 请不要使用mysql_函数。它们已被弃用很长时间,不再受支持。您的代码也对 SQL 注入开放。你会得到2147483647,因为它是可能的最高 32 位有符号整数。
  • 在插入前打印查询。您的代码似乎没有错误

标签: php mysql


【解决方案1】:

尝试得到十位数的rand no

$randnum = rand(1111111111,9999999999);

【讨论】:

  • 感谢这解决了问题,我会在 8 分钟后接受它让我接受
  • 为什么是1111111111 而不是1000000000
  • @h2ooooooo 你可以使用任何数字吗?
【解决方案2】:

您需要更改列类型。您尝试插入的数字高于列最大值(在您的情况下为 SIGNED INT - 2147483647)

SIGNED INT - 2147483647
UNSIGNED INT - 4294967295

SIGNED BIGINT - 9223372036854775807
UNSIGNED BIGINT - 18446744073709551615

【讨论】:

    【解决方案3】:

    您得到2147483647,因为它是存在的最高有符号32 位整数(二进制是1111111111111111111111111111111)。这也是常量PHP_INT_MAX的内容。

    只需使用带循环的字符串和mt_rand() 函数:

    <?php
    
    for ($randomNumber = mt_rand(1, 9), $i = 1; $i < 10; $i++) {
        $randomNumber .= mt_rand(0, 9);
    }
    
    var_dump($randomNumber); //eg. string(10) "9152676628"
    

    DEMO

    【讨论】:

      【解决方案4】:

      如果你愿意,你也可以试试这个。它不是生成随机数而是生成随机字符串

      private string generaterandomnumber()
              {
                  string Rand1 = RandomString(8);
                  string Rand2 = RandomString(8);
                  docNum = Rand1 + "-" + Rand2;
                  MD5 md5 = new MD5CryptoServiceProvider();
                  md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(docNum));
      
                  //get hash result after compute it
                  byte[] result = md5.Hash;
      
                  StringBuilder strBuilder = new StringBuilder();
                  for (int i = 0; i < result.Length; i++)
                  {
                      //change it into 2 hexadecimal digits
                      //for each byte
                      strBuilder.Append(result[i].ToString("x2"));
                  }
                  return strBuilder.ToString();
              }
      

      不需要投票!!!谢谢

      【讨论】:

        【解决方案5】:

        您应该考虑使用mt_rand 函数,因为它可以提供更好的分布范围。

        在您的代码中,您没有使用完整的 10 位数字范围,请尝试类似

        $MIN_SESSION_ID = 1000000000;
        $MAX_SESSION_ID = 9999999999;
        
        $randId = mt_rand($MIN_SESSION_ID, $MAX_SESSION_ID);
        
        echo $randId;
        

        【讨论】:

          【解决方案6】:

          使用此代码。

          $x = 10; // Amount of digits
          $min = pow(10,$x);
          $max = pow(10,$x+1)-1);
          $value = rand($min, $max);
          

          【讨论】:

          • 试着充实你的答案。仅仅发布一个没有任何上下文或解释的代码块并不是一个好的答案。
          【解决方案7】:

          使用 php mt_rand() 函数代替 rand()

          <?php
          echo mt_rand();
          ?>
          

          【讨论】:

            【解决方案8】:
            function random_num ($len)
            {
             $ch = "0123456789";
             $l = strlen ($ch) - 1;
             $str = "";
             for ($i=0; $i < $len; $i++)
             {
                 $x = rand (0, $l);
                 $str .= $ch[$x];
             }
             return $str;
            }
            

            【讨论】:

              【解决方案9】:

              您的号码生成代码没有问题。尝试在定义变量之前取消设置变量,看看是否能解决问题。

              unset($num0, $num1, $num2, $num3);
              $num0 = (rand(10,100));
              $num1 = date("Ymd");
              $num2 = (rand(100,1000));
              $num3 = time();
              $randnum = $num0 . $num1 . $num2 . $num3;
              

              您可以使用以下代码轻松地使用 rand 函数生成一个 10 位数字:rand(1111111111,9999999999)

              【讨论】:

                【解决方案10】:

                当我运行你的脚本时,我每次都会得到不同的数字。 为什么不使用 uniqid() 函数?

                【讨论】:

                  【解决方案11】:

                  这里是生成10位随机数的简单方法

                  <?php
                  
                  function generateRandomNumber($length = 10) {
                      $number = '1234567890';
                      $numberLength = strlen($number);
                      $randomNumber = '';
                      for ($i = 0; $i < $length; $i++) {
                          $randomNumber .= $number[rand(0, $numberLength - 1)];
                      }
                      return $randomNumber;
                  }
                  
                  echo generateRandomNumber();
                  
                  ?>
                  

                  【讨论】:

                    【解决方案12】:

                    这是最适合记住您何时生成此密钥/数字的方法

                    echo $key = time(); 
                    

                    它的 10 位数字将其转换为准确的日期和时间。

                    【讨论】:

                      猜你喜欢
                      • 2014-11-03
                      • 2018-05-20
                      • 2010-09-07
                      • 2011-10-26
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-03-01
                      相关资源
                      最近更新 更多