Php 从mySQL表检索时,邮政编码缺少前导0

Php 从mySQL表检索时,邮政编码缺少前导0,php,mysql,codeigniter,Php,Mysql,Codeigniter,我在mySQL表中以CHAR(5)的形式存储5位邮政编码。但是,当从表中检索到带前导零的邮政编码(即02138)时,它将变为2138。由于它作为02138(通过phpmyadmin检查)存储在表中,因此它与PHP剥离前导0有关?如何确保保留前导0 我在codeigniter中使用了相当长的SQL查询字符串 foreach($q as $row){ /// bunch of code that adds more elements to the $row array

我在mySQL表中以CHAR(5)的形式存储5位邮政编码。但是,当从表中检索到带前导零的邮政编码(即02138)时,它将变为2138。由于它作为02138(通过phpmyadmin检查)存储在表中,因此它与PHP剥离前导0有关?如何确保保留前导0

我在codeigniter中使用了相当长的SQL查询字符串

foreach($q as $row){
        /// bunch of code that adds more elements to the $row array

        $data['rows'][] = $row;
    }

您需要的是MySQL零填充。将列指定为zerofill。

将其显示为文本而不是数字

作为一种快速解决方法,请参见@tandu version。但在这里你应该找到问题的根源。
str_pad($zip, 5, 0, STR_PAD_LEFT);
发生的事情很清楚——PHP在某处将字符串“012345”转换为int 12345。 所以现在你应该找到,谁做的,什么时候做的<代码>变量转储值并查看它们是字符串还是int


可能在您的框架中的某个地方,您将列类型指定为数字,但它实际上在您的数据库中是字符。

显示从数据库中获取值的代码和显示值的代码现在显示显示邮政编码的代码。PHP会将全数字字符串转换为数字类型,但前提是它认为必须这样做。您是否在其他地方使用邮政编码字段?如何在php中将其显示为文本?我猜php在看到所有数字时会自动转换为数字?您应该将字段的数据类型设置为varchar(10)-这会将字段长度设置为10个字符。我是说5+4风格的拉链是10。否则,varchar(5)应该可以工作。因为int不以0开头,所以0被删除。嗨-它是如何添加的?也许你的代码去掉了前导零。我刚刚测试了将06605添加到一个带有varchar(255)的字段集中,但它没有去掉前导零。我已经将其存储为02138,作为带有前导0的CHAR(5)。我还需要零填充吗?是的。如果字段为整数,则不保存零。我也喜欢下面的@tandu解决方案。这如何适用于国际代码?这个解决方案似乎需要超过5个字符的空格,这会增加太多的零。如果我们将$zip作为数字,应该这样做。这是更多的解决办法。在这里,我们应该找到问题的根源。你的解决方案工作得很好,但它更像是权宜之计,当我们隐藏问题的根源时。