Значение вставляется как 2147483647 в базу данных

Все номера телефонов, которые я пытаюсь войти в мою базу данных, вставляются как 2147483647 .

Поле базы данных является integer(11) .

Перед тем, как номер телефона вставлен, он выполняет следующий код, чтобы удалить все пробелы, тире и скобки:

 if (!empty($hphone)) $phone = $hphone; else if (!empty($HomePhone)) $phone = $HomePhone; else if (!empty($Phone1)) $phone = $Phone1; $phone = preg_replace("/[^0-9]/", "", $phone); 

Почему он вставляет номер телефона 2147483647 каждый раз, независимо от того, какой номер телефона?

Если вы можете, преобразуйте номер телефона в поле VARCHAR, не храните его как подписанное (или беззнаковое) числовое значение (int, bigint, double и т. Д.).

В этом случае ограничение для подписанного INT в MySQL 2147483647 является причиной вашей проблемы. Все, что больше вставляется в это поле, будет ограничено этим максимальным значением.

Например, номер телефона 555-555-5555, если он превышает этот предел (5555555555> 2147483647), при таком хранении это приведет к максимальному значению 2147483647.

Я также рекомендую не хранить его как BIG INT или любой другой цифровой тип. Как вы будете обрабатывать расширения или специальные закодированные символы, такие как:

  +02 112020 10020 1-333-232-9393 x203 

BTW: не знаю, является ли первый реальный формат не в США, но вы получаете идею

Кроме того, номера телефонов с соответствующими ведущими 0 будут иметь некоторые из них, потерявшие матер, насколько велика цифра:

  021-392-9293 

Будет номер 213929293

если вы хотите сохранить его как число, используйте bigint, потому что int имеет максимальное значение, равное 2147483647.

Таким образом, любой номер, который вы пытаетесь сохранить, превышает 2147483647, будет сохранен как 2147483647.

Вот несколько ссылок на типы mysql:

http://dev.mysql.com/doc/refman/5.0/en/integer-types.html