5

我的代码本质上是

$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' => 字符串 'bar' (length=3)

编辑 2:我刚刚发现了一个更大的问题:以 0 开头的电话号码也受到影响。没有简单的方法(如下面建议的 str_pad)来解决这个问题

编辑 3:服务器是 Windows 7,带有 xampp 1.7.7 和 PHP 5.3.8 数据库是 InnoDB,带有 latin1_swedish_ci 和 COMPACT 行格式

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

4

1 回答 1

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)');
于 2012-07-10T13:06:23.150 回答