さて、Steam Web APIをいじくり回してきましたが、値の1つを_$Steam64
_という変数に格納しています。このコードスニッパーを使用してmysqlデータベースに挿入すると、変数に格納されている整数とは異なる整数が挿入されます。
$sql_query = "INSERT INTO users_info (Steam64) VALUES ('$Steam64')";
var_dump($Steam64);
は実際のintを返すので、エコーもします。ここで何が起こっているかわからないので、どんな助けでも大歓迎です。
これはおそらく、クエリを二重引用符で囲んでいるためですが、変数は単一引用符で囲まれているため、リテラルとして扱われ、列が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 。
2147483647は、mysqlの最大のint値です。型をintからbigintに変更するだけです。
私が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;
データ型をINTからBIGINTに変更するだけです
データ型INTの最大値は2147483647です。挿入する数値が2147483647より大きい場合、問題が発生します。解決策として、BIGINTの最大値は9223372036854775807であるため、データ型をINTからBIGINTに変更すると、問題が解決する場合があります。このサイトをご覧ください: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html
整数型[〜#〜] int [〜#〜]は4バイトストレージです。変更した場合、 "signed"フラグがある場合、-2^(4*8-1)=-2147483648
から2^(4*8-1)-1=2147483647
になります。 nsignedへのフラグは、0
から2^(4*8)-1
の範囲になります。 MySQLは、8バイトストレージであるBIGINTをサポートします。より大きな値を保存しようとすると、範囲の最大値が保存されます
INTEGERからBIGINTへのデータ型の変更に同意します。現在、node.js/sequelizeを使用してWebアプリを構築し、以下のリファクタリングにより、「2147483647」に操作されたreact-reduxフォームからの電話番号の投稿が解決されました。
clientPhone: {
type: DataTypes.BIGINT,
allowNull: true
},