使用php在mysql中存储电话号码时出错

时间:2012-06-03 17:21:25

标签: php mysql

我有一些电话号码(经过验证,所有电话号码只包含整数,其中只有-+)作为文字文件中的字符串。

我正在mysql表上进行简单的mysql更新,其电话号码列为int(12)。请注意,我使用intval()将从文本文件中提取的每个电话号码转换为整数。

我面临的问题是,不是插入数字,而是将 2147483647 插入每列。我想我在某个地方犯了一个小小的愚蠢错误,但我仍然无法弄明白。谁能解释我的错误呢?

编辑:这是我正在使用的代码片段(它没有给出任何sql错误):

$sql="UPDATE ".$table." SET mobile = ".intval($smob).", phone = ".intval($sphone)." WHERE roll='".$sroll."'";
mysql_query($sql, $con) or die(mysql_error());

2 个答案:

答案 0 :(得分:1)

摘自intval()手册:

  

最大值取决于系统。 32位系统的最大有符号整数范围为-2147483648到2147483647.因此,例如在这样的系统上,intval('1000000000000')将返回2147483647.64位系统的最大有符号整数值为9223372036854775807。

您获得的是32位计算机上有符号整数的最大数量。

我强烈建议您不要将此功能用于电话号码转换。其中一个简单的原因是我的手机号码是11位数字(国际访问没有前导+或双零),我相信有些国家的数字更多。

为什么您需要将电话号码存储为int?由于您很可能没有对客户中可能拥有最大电话号码的人进行一些计算和统计,并且此数据可能仅用于开发票或联系信息,您可以将其保留为字符串。

答案 1 :(得分:0)

电话号码不是整数,不应使用整数类型存储。

发生观察到的行为是因为您尝试存储的值超出了列类型接受的范围。我建议将MySQL置于严格模式 - 这会强制它在插入的数据等无法存储时返回错误,而不是默默地尝试做任何最不好的事情而不会失败。