Php 在数据库codeigniter中显示不同值的数据上载

Php 在数据库codeigniter中显示不同值的数据上载,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个表单,从中获取要保存到数据库中的值。运行正在插入数据库的插入查询,但问题是保存的电话号码看起来像这个号码2147483647,尽管在查询中我传递的是号码9846586583。每次我插入它都会保存这个号码 我设置的电话号码列的数据类型是int16 下面是显示的查询,通过该查询可以显示正确的查询 INSERT INTO `posts` ( `country`, `city`, `area`, `street`, `house_no`, `hou

我有一个表单,从中获取要保存到数据库中的值。运行正在插入数据库的插入查询,但问题是保存的电话号码看起来像这个号码2147483647,尽管在查询中我传递的是号码9846586583。每次我插入它都会保存这个号码

我设置的电话号码列的数据类型是int16

下面是显示的查询,通过该查询可以显示正确的查询

INSERT INTO `posts` (
    `country`,
    `city`,
    `area`,
    `street`,
    `house_no`,
    `house_type`,
    `floor`,
    `number_of_rooms`,
    `price`,
    `owners_phone`,
    `posted_by`,
    `featured_post`
)
VALUES
(
    'nepal',
    'pkr',
    'ratekhoire',
    'fulbari',
    '45',
    '1s',
    '0',
    '7',
    '10000',
    '9846586583',
    'bhabi',
    'Y'
)

实际上,我建议将int改为String,即varcharnumofidights,这样您就可以在电话号码中使用前缀0或plus。然后可以使用两个helper方法解析它们

int16的最大值为32767,因为它只有2字节=16位,您可以通过将二进制值111111111转换为十进制来检查它

此外,数字2147483647的二进制等效值为11001100,仅小于4字节。无符号的十进制数将是两倍大,但在内存方面不是这样的原因:

2147483647是MySQL的最大int值。 原因是有符号整数的最大值为2147483647。即使指定了INT16,也不意味着可以存储16的长度,因为最大允许值是2147483647。INT声明中16的含义是填充零的长度,只有在列上启用了ZEROFILL时才适用。但长度仍然不能达到16个字符

如果您已将原始数据保存为9846586583,它将被截断为最大值2147483647

解决方案:


只需将数据类型从int更改为bigint或varchar。

将数据类型更改为bigint16