我的代码基本上是
$query = mysql_query('SELECT `foo` FROM `Bar` WHERE id=1', $conn)
$result = mysql_fetch_assoc($query)
$val = $map[$result['foo']];
其中foo的类型为CHAR(2)
,而id = 1的值为07
但是返回的值只有7,这在将其用作关联数组的索引时会导致问题。
PhpMyAdmin显示07的正确值
使用mysql_fetch_object时得到的结果相同
来自评论:var_dump($ result)的结果是
array
'foo' => string '7' (length=1)
和var_dump($ map)是 排列 ' 07' => string' bar' (长度= 3)
编辑2: 我刚刚发现了一个更大的问题:以0开头的电话号码也会受到影响。没有简单的方法(如下面建议的str_pad)来解决这个问题
编辑3: 服务器是Windows 7,xampp 1.7.7和PHP 5.3.8 数据库是带有latin1_swedish_ci和COMPACT行格式的InnoDB
CREATE TABLE `Bar` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`foo` char(2) DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
编辑4:
SELECT CONCAT("0", foo) FROM Bar WHERE id = 55
返回07
答案 0 :(得分:6)
sprintf('%02d', $row['number']);
或者您也可以使用str_pad:
str_pad($row['number'], 2, '0', STR_PAD_LEFT);
这也可能会阻止PHP的自动类型转换:
$var = (string) $row['number'];
您还可以在第一个零之前添加单引号,如下所示:'07
您可以通过执行此操作更新表中的所有值(因此您无需更改每个条目):
mysql_query('UPDATE tablename SET rowname = concat("\'", rowname)');