Я пытаюсь сгенерировать случайное 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

7
user3584968 29 Апр 2014 в 15:07

11 ответов

Лучший ответ

Попытаться получить десятизначный ранд нет

$randnum = rand(1111111111,9999999999);
35
Rakesh Sharma 29 Апр 2014 в 11:11

Вам необходимо изменить тип столбца. Число, которое вы пытаетесь вставить, превышает максимальное значение столбца (в вашем случае SIGNED INT - 2147483647)

SIGNED INT - 2147483647
UNSIGNED INT - 4294967295

SIGNED BIGINT - 9223372036854775807
UNSIGNED BIGINT - 18446744073709551615
4
Vasil Nikolov 29 Апр 2014 в 11:21

Вы получаете 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"

ДЕМО

2
h2ooooooo 29 Апр 2014 в 11:16

Вы также можете попробовать это, если хотите. Это не генерирует случайное число, а случайную строку

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();
        }

Голосование против не требуется !!! Спасибо

2
Professor 29 Апр 2014 в 11:31

Вам следует рассмотреть возможность использования функции mt_rand, поскольку она дает лучший диапазон распределения.

В вашем коде вы не используете полный диапазон из 10 цифр, попробуйте что-нибудь вроде

$MIN_SESSION_ID = 1000000000;
$MAX_SESSION_ID = 9999999999;

$randId = mt_rand($MIN_SESSION_ID, $MAX_SESSION_ID);

echo $randId;
1
Kami 29 Апр 2014 в 11:17

Используйте этот код.

$x = 10; // Amount of digits
$min = pow(10,$x);
$max = pow(10,$x+1)-1);
$value = rand($min, $max);
0
Manibharathi 29 Апр 2014 в 11:09

Используйте функцию php mt_rand () вместо rand ()

<?php
echo mt_rand();
?>
0
dkakoti 29 Апр 2014 в 11:13
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;
}
0
alreadycoded.com 29 Апр 2014 в 11:14

Нет проблем с кодом генерации вашего номера. Попробуйте отключить переменные до того, как они будут определены, и посмотрите, решит ли это проблему.

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)

0
Danieloplata 29 Апр 2014 в 11:19

Когда я запускаю ваш скрипт, я каждый раз получаю разные числа. Почему вы не используете функцию uniqid ()?

0
Reporter 29 Апр 2014 в 11:48

Вот простой способ создания 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();

?>
0
Kaustav Chakravorty 25 Июл 2015 в 12:02