Какова основная цель максимального ограничения числа в php и mysql?
Означает ли это, что мы можем / не можем обрабатывать или хранить числа, превышающие лимит?
Я эхо PHP_INT_MAX
и он показывает 2147483647
.
Я 2.147483647E+30
на 1000000000000000000000
и получаю ответы вроде 2.147483647E+30
которые, я думаю, уже превышают лимит?
Пожалуйста, порекомендуйте.
Большое спасибо за руководство.
Этот вопрос возникает, когда я думаю о проверке ввода пользовательской формы. Я хочу, чтобы пользовательский ввод соответствовал нашему определенному порядковому номеру, а не что-то еще.
Затем я делаю онлайн-поиск лучших практик и узнаю об этом «лимите», но не знаю, как правильно его обрабатывать при использовании PHP & MYSQL. Посоветуйте, пожалуйста:
Шаг 1: обрезать и преобразовать пользовательскую форму ввода «номер строки» в номер.
Шаг 2: подтверждение числа в положительном целочисленном формате.
Шаг 3: подтверждение числа не превышает мой «максимальный предел».
Поскольку предел php (2,147,483,647) меньше предела mysql (18 446 744 073 709 500 000)? Я возьму php в качестве максимального предела.
Шаг 4: выполните некоторые вычисления …
Шаг 5: проверка моего результата не превышает моего максимального предела.
Шаг 6: сохраните результат в mysql.
Это аппаратный предел процессора. Вы можете использовать функцию bc math для работы с большими числами. В mysql речь идет о выравнивании байтов, поэтому он знает, на каком сдвиге находится какой столбец.
Результат умножения преобразуется в float .
PHP_INT_MAX
– это константа наибольшего integer
вы можете использовать в этой сборке PHP (32 бит в вашем случае). Если ваша ОС и процессор поддерживают 64-разрядную версию, вы можете использовать 64-битную сборку PHP для поддержки гораздо большего числа в целых числах. (Это вызывает проблемы, когда разработчики разработали свой код в пределах 64-битной сборки и затем используются для 32-битных построений, предполагая, что этот тип имеет значение.)
Когда вы умножаете число на большее, PHP признает, что это новое значение не будет вписываться в integer
и преобразует тип в long
или float
. В последнем случае вы потеряете определенную точность, поэтому важно учитывать, как ваш код влияет на типы переменных. На некоторых языках вы получили бы ошибку, пытаясь установить значение, большее, чем это было разрешено этим типом, потому что язык откажется автоматически изменить тип для вас. Таким образом, PHP – это более простой язык программирования.
<?php $my_number = PHP_INT_MAX; var_dump(gettype($my_number), $my_number); $my_number = $my_number * 1000000000000000000000; var_dump(gettype($my_number), $my_number);
Output: string(7) "integer" int(2147483647) string(6) "double" float(2.147483647E+30)
В мире вычислений существует множество ограничений, основанных на математической модели используемого нами компьютерного оборудования.
Например, если мы решили представить целое число в 1 бит памяти, мы могли бы представить числа 0 и 1.
Если бы мы увеличили это до более общих значений 8
, 16
, 32
или 64 bits
мы можем представить следующее число различных значений:
2^8 - 256
, 2^16 - 65,536
, 2^32 - 4,294,967,296
, 2^64 - 18,446,744,073,709,551,616
. Конечно, если мы хотим иметь возможность представлять отрицательные числа, мы можем подписать целое число (используйте один бит для обозначения отрицательного или положительного). В случае 32 bit signed integer
это позволило бы нам представить числа: −(2^31)
до 2^31 − 1
или +2,147,483,647
до +2,147,483,647
(тот же верхний предел, что и номер в вашем вопросе).
Целые числа, возможно, являются простейшей формой представления чисел в компьютерной системе (за пределами прямой двоичной), но из-за присущих ей систем, нам часто придется использовать другие системы для больших чисел, которые мы не можем представлять с целым числом. PHP будет переключаться с использования целого числа на использование чисел с плавающей запятой, когда предел превышен.
Предел, который вы видите в PHP, скомпилирован и зависит от архитектуры компилятора. Похоже, что ваш PHP был скомпилирован как 32 бита.
Вы можете больше узнать о компьютерных системных номеров в Википедии .