私は本質的にであるコードを持っています
$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'(長さ= 3)です
編集2:私はこれに関してさらに大きな問題を発見しました:0で始まる電話番号も影響を受けます。この問題を修正する簡単な方法はありません(以下に提案するstr_padのように)
編集3:サーバーはxampp1.7.7およびPHP5.3.8を備えたWindows7ですデータベースは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;
編集
SELECT CONCAT("0", foo) FROM Bar WHERE id = 55
4:07を返します