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'(長さ= 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 = 554: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 に答える