SQL-тип данных bigint рассматривается как строка методом gettype (); функция. Зачем?

1) Я хочу понять, почему числовые данные хранятся как bigint рассматривается как 'string' когда я звоню gettype(); в php.

2) Есть ли такая функция, как is_bigint(); для PHP, который может проверить, является ли переменная bigint.

3) Как я могу проверить тип данных, когда его bigint умножается на 1 ИЛИ добавляя 0 к строке, смешанной с числами и алфавитами, будет повторен 'Notice: A non well formed numeric value encountered in line 2' и звонит gettype(); на теперь умноженный тип данных вернет:integer

1

Решение

Ответ прост: у PHP нет типа bigint. Драйвер базы данных, или откуда вы получаете это значение, предоставляет вам ваши данные в виде строки, потому что это единственный надежный способ представления значения.

В 64-битной системе тип int в PHP должен быть 64-битным целым числом со знаком; но в 32-битной системе он будет 32-битным, поэтому ваши значения не будут соответствовать. Вы можете проверить дважды, повторив PHP_INT_MAX встроенная постоянная, что дает вам максимальное значение, которое вы можете хранить в целых числах в вашей сборке PHP.

Чтобы узнать, все ли значения состоят из цифр, вы можете использовать ctype_digit($value), но это не будет работать для отрицательных чисел, так как - это не цифра. Лучший способ, который я знаю, это использовать регулярные выражения, например, preg_match('/^-?[0-9]+/', $value),

Если ваши значения соответствуют (т.е. между PHP_INT_MIN а также PHP_INT_MAX), вы можете просто привести строку к целому числу с (int)$value или же intval($value)нет необходимости в таких хитростях, как +0 или же *1,

Если они этого не делают, вам нужно будет обрабатывать их как числа с плавающей запятой, что и делает PHP, если результат операции слишком велик для целого числа, но подразумевает неточное их хранение; или используйте математический модуль произвольной точности, такой как GMP или же BCMath.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]