web-dev-qa-db-ja.com

不正な整数(2147483647)がMySQLに挿入されますか?

さて、Steam Web APIをいじくり回してきましたが、値の1つを_$Steam64_という変数に格納しています。このコードスニッパーを使用してmysqlデータベースに挿入すると、変数に格納されている整数とは異なる整数が挿入されます。

$sql_query = "INSERT INTO users_info (Steam64) VALUES ('$Steam64')";

var_dump($Steam64);は実際のintを返すので、エコーもします。ここで何が起こっているかわからないので、どんな助けでも大歓迎です。

36
Archey

これはおそらく、クエリを二重引用符で囲んでいるためですが、変数は単一引用符で囲まれているため、リテラルとして扱われ、列がintの場合、代わりに0が返されます。

これを試して:

_$sql_query = "INSERT INTO users_info (Steam64) VALUES ('" . $Steam64 . "')";
_

また、フレームワークを取得する前に、SQLステートメントに直接投稿される変数をサニタイズしていない場合は、 SQLインジェクション を必ず読んでください。

-更新-

「ダンプされる値」のコメントに基づきます。挿入しようとしている数値は、32ビットシステムには大きすぎます。 32ビットの最大値は4,294,967,295、64ビットの最大値は18,446,744,073,709,551,615。列をintではなくvarchar(100)ハッシュに変換するか、64ビットシステムに切り替えることをお勧めします。 Greatmax intsに関する記事 here 、および here

36
Mike Purcell

2147483647は、mysqlの最大のint値です。型をintからbigintに変更するだけです。

57
George

私がSQLで遊んでいる間、MySQLはMySQL intデータ型と同じ問題を抱えていました。データ型をintからbigintに修正した問題を修正しました。

MySQL整数型http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

ALTER TABLE tablename MODIFY columnname BIGINT; 
8
Lyserty

データ型をINTからBIGINTに変更するだけです

5
Ron Varghese

データ型INTの最大値は2147483647です。挿入する数値が2147483647より大きい場合、問題が発生します。解決策として、BIGINTの最大値は9223372036854775807であるため、データ型をINTからBIGINTに変更すると、問題が解決する場合があります。このサイトをご覧ください: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

5
Nadeem Shakya

整数型[〜#〜] int [〜#〜]は4バイトストレージです。変更した場合、 "signed"フラグがある場合、-2^(4*8-1)=-2147483648から2^(4*8-1)-1=2147483647になります。 nsignedへのフラグは、0から2^(4*8)-1の範囲になります。 MySQLは、8バイトストレージであるBIGINTをサポートします。より大きな値を保存しようとすると、範囲の最大値が保存されます

5
Rodney Salcedo

INTEGERからBIGINTへのデータ型の変更に同意します。現在、node.js/sequelizeを使用してWebアプリを構築し、以下のリファクタリングにより、「2147483647」に操作されたreact-reduxフォームからの電話番号の投稿が解決されました。

clientPhone: {
    type: DataTypes.BIGINT,
    allowNull: true
},
1
Peter Tountas

操作->テーブルオプション->増分値を最小値または任意の増分値に変更します。

自動インクリメントの大きな問題は、その非常に大きな値が挿入値で問題を開始する場合、誤って最後のエントリから開始することです。定義済みのデータ型で
enter image description here

1
lalit mohan