Valeur insérée en tant que 2147483647 dans la base de données
Tous les numéros de téléphone, je suis en train d'essayer d'entrer dans ma base de données sont insérées comme 2147483647
.
Le champ de base de données est un integer(11)
.
Avant le numéro de téléphone est inséré, il passe à travers le code suivant afin de supprimer tous les espaces, tirets et parenthèses:
if (!empty($hphone)) $phone = $hphone;
else if (!empty($HomePhone)) $phone = $HomePhone;
else if (!empty($Phone1)) $phone = $Phone1;
$phone = preg_replace("/[^0-9]/", "", $phone);
Pourquoi est-il insérer le numéro de téléphone comme 2147483647
à chaque fois, peu importe ce que le numéro de téléphone est?
Magasin de téléphone, le numéro de la chaîne (
Qui évidemment ne va pas résoudre son problème
Noir: ce que votre hypothèse est basée sur?
Pouvez-vous montrer le code où $hphone est?
Je pense que le problème est qu'il essaye de le stocker sous forme de chaîne, malgré qu'il soit un entier. Serait la suppression des guillemets simples de la valeur dans la requête d'insertion de corriger ce problème ou dois-je le jeter comme un entier via PHP?
varchar
), non pas comme un entier.Qui évidemment ne va pas résoudre son problème
Noir: ce que votre hypothèse est basée sur?
Pouvez-vous montrer le code où $hphone est?
Je pense que le problème est qu'il essaye de le stocker sous forme de chaîne, malgré qu'il soit un entier. Serait la suppression des guillemets simples de la valeur dans la requête d'insertion de corriger ce problème ou dois-je le jeter comme un entier via PHP?
OriginalL'auteur scarhand | 2014-02-27
Vous devez vous connecter pour publier un commentaire.
Si vous le pouvez, convertir le numéro de téléphone à un champ de type VARCHAR, ne le conservez pas comme un signés ou non signés) valeur numérique (de type int, bigint, double, etc...).
Dans ce cas, la limite pour la signature de INT dans MySQL, 2147483647 est ce qui est à l'origine de votre problème. Plus rien n'inséré dans ce domaine seront plafonnés à cette valeur maximale.
Par exemple le numéro de téléphone 555-555-5555 si grand que cela limite (5555555555 >2147483647), en tant que tel stockage il en résulterait la valeur max de 2 147 483 647.
Je recommande aussi de ne pas les stocker comme un GRAND INT ou tout autre type numérique. Comment allez-vous gérer l'extension ou spéciaux caractères codés comme:
BTW: je ne sais pas si la première est vraie non-US format de nombre, mais vous obtenez l'idée
Aussi, les numéros de téléphone avec les principales 0 serait être certains de il n'a pas perdu de mater comment grand le nombre:
Serait le nombre 213929293
sql_mode
bon point, il peut tout rejeter, mais beaucoup n'aiment pas ce niveau de rigueur.
en effet. Il y a trop de gens qui préfèrent les "ordures" données de plus de "pas de données" 🙂
Ouais, je l'ai changé pour un VARCHAR. C'est tout à fait logique. Merci, zerkms, et tout le monde qui a contribué.
le standard international pour l'annuaire téléphonique de l'affichage du numéro est très proche de ce que vous avez. Amérique du nord les nombres sont comme
+1.212.555.1212
lorsque le code de pays est précédé d'un +. Royaume-UNI numéro peut être+44.800.999.9999
par exempleOriginalL'auteur Ray
si vous voulez le stocker en tant que numéro de type bigint parce int a sa valeur maximale égale à 2 147 483 647.
Donc quel que soit le numéro que vous essayez de magasin qui est plus élevé que 2147483647 sera stocké sous la forme de 2 147 483 647.
Ici est une référence pour mysql types:
http://dev.mysql.com/doc/refman/5.0/en/integer-types.html
OriginalL'auteur piacente.cristian