47

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

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

var_dump($steam64);真の int を返すので、それをエコーし​​ます。ここで何が起こっているのかわからないので、助けていただければ幸いです。

4

10 に答える 10

69

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

于 2013-07-22T08:49:50.107 に答える
42

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


また、私が炎上する前に、 SQL ステートメントに直接ポストされる変数をサニタイズしていない場合に備えて、 SQL インジェクションについてよく読んでください。

于 2012-04-21T02:52:45.440 に答える
11

私が 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; 
于 2016-08-03T19:10:09.927 に答える
5

整数型INTは 4 バイトのストレージです。「符号付き-2^(4*8-1)=-2147483648」フラグがある場合は からまで取得できます。フラグを符号なしに変更すると、 からまでの範囲になります。MySQL は、8 バイトのストレージである BIGINT をサポートします。より大きな値を保存しようとすると、範囲の最大値が保存されます2^(4*8-1)-1=214748364702^(4*8)-1

于 2015-08-25T18:57:24.420 に答える
-5

最も簡単な方法は、MySQL の "int" を "varchar" に変更することです。

于 2016-02-19T16:58:56.563 に答える
-5
CREATE TABLE `dvouchers` (
  `2147483647` int(3) NOT NULL auto_increment,
  `code` varchar(12) NOT NULL default '1',
  `type` char(1) NOT NULL default '$',
  `count` int(3) unsigned NOT NULL default '0',
  `amount` int(3) unsigned default '0',
  `notes` text,
  `expiryDate` date default NULL,
  `fkUserAdminId` int(11) NOT NULL default '0',
  PRIMARY KEY  (`2147483647`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
于 2013-08-10T06:55:48.763 に答える