1

私はいくつかの電話番号をテキストファイルに文字列として持っています(すべてが整数のみ、-または整数のみを含むように検証されています)。+

電話番号列が int(12) の mysql テーブルで単純な mysql 更新を行っています。テキスト ファイルから抽出した各電話番号を intval() を使用して整数に変換していることに注意してください。

私が直面している問題は、数字が挿入される代わりに、各列に2147483647が挿入されることです。私はどこかで小さなばかげた間違いを犯していると思いますが、それでもわかりません。誰が私が犯している間違いを説明できますか?

編集:これが私が使用しているコードの一部です(SQLエラーは発生しません):

$sql="UPDATE ".$table." SET mobile = ".intval($smob).", phone = ".intval($sphone)." WHERE roll='".$sroll."'";
mysql_query($sql, $con) or die(mysql_error());
4

2 に答える 2

1

intval()マニュアルからの抜粋:

最大値はシステムによって異なります。32 ビット システムの符号付き整数の最大範囲は -2147483648 ~ 2147483647 です。たとえば、このようなシステムでは、intval('1000000000000') は 2147483647 を返します。64 ビット システムの符号付き整数の最大値は 9223372036854775807 です。

取得しているのは、32 ビット マシンでの符号付き整数の最大数です。

この機能を電話番号の変換に使用しないことを強くお勧めします。単純な理由の 1 つは、私の携帯電話番号が 11 桁の番号 (国際アクセス用に先頭の + または 2 つのゼロなし) であり、さらに多くの桁を持つ国があることです。

電話番号を として保存する必要があるintのはなぜですか? ほとんどの場合、クライアントの中で誰が最大の電話番号を持っているかについて計算や統計を行っていない可能性が高く、このデータはおそらく請求または連絡先情報にのみ使用されるため、文字列のままにしておくことができます.

于 2012-06-03T17:33:57.643 に答える
0

電話番号は整数ではないため、整数型を使用して保存しないでください。

観察された動作は、保存しようとしている値が列の型で受け入れられる範囲外であるため発生します。MySQL を厳密モードにすることをお勧めします。これにより、挿入されたデータなどを格納できない場合にエラーを返すように強制されます。

于 2012-06-03T18:40:11.457 に答える