복붙노트

잘못된 정수 (2147483647)가 MySQL에 삽입됩니까?

PHP

잘못된 정수 (2147483647)가 MySQL에 삽입됩니까?

자, 저는 Steam Web API를 가지고 놀고 있었고, $ steam64라는 변수에 저장된 값 중 하나가 있습니다. 이 코드 스 니퍼를 사용하여 mysql 데이터베이스에 삽입하면 변수에 저장된 것보다 completley 다른 정수가 삽입됩니다.

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

var_dump ($ steam64); 실제 int를 반환하므로 echo가 반환됩니다. 여기에 무슨 일이 일어나고 있는지 확실하지 않아서 도움을 얻을 수 있습니다.

해결법

  1. ==============================

    1.그것은 아마도 당신이 이중 따옴표로 질의를 감싸고 있기 때문일 것입니다. 그러나 변수는 작은 따옴표로되어 있기 때문에 리터럴로 처리되고, 열이 int 인 경우에는 0이됩니다.

    그것은 아마도 당신이 이중 따옴표로 질의를 감싸고 있기 때문일 것입니다. 그러나 변수는 작은 따옴표로되어 있기 때문에 리터럴로 처리되고, 열이 int 인 경우에는 0이됩니다.

    이 시도:

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

    또한 flamed되기 전에 SQL 문에 직접 변수를 위조하지 않을 경우 SQL injection을 읽어보십시오.

    - 업데이트 -

    "버려지는 가치"에 대한 귀하의 의견을 토대로합니다. 삽입하려는 번호가 32 비트 시스템에 비해 너무 큽니다. 32 비트의 최대 값은 4,294,967,295이고 64 비트의 최대 값은 18,446,744,073,709,551,615입니다. int가 아닌 varchar (100) 해시로 열을 변환하거나 64 비트 시스템으로 전환하는 것이 좋습니다. max ints에 대한 훌륭한 기사와 여기.

  2. ==============================

    2.2147483647은 mysql에서 가장 큰 int 값입니다. 유형을 int에서 bigint로 변경하면됩니다.

    2147483647은 mysql에서 가장 큰 int 값입니다. 유형을 int에서 bigint로 변경하면됩니다.

  3. ==============================

    3.SQL과 MySQL을 가지고 놀고있는 동안 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; 
    
  4. ==============================

    4.정수형 INT는 4Bytes 저장 장치입니다. 변경하면 "signed"플래그가있을 때 -2 ^ (4 * 8-1) = - 2147483648에서 2 ^ (4 * 8-1) -1 = 2147483647이됩니다. 서명되지 않은 플래그는 0에서 2 ^ (4 * 8) -1 사이의 범위를가집니다. MySQL은 BIGINT를 8Bytes 저장 장치로 지원합니다. 값을 더 크게 저장하려고하면 범위의 최대 값을 저장합니다.

    정수형 INT는 4Bytes 저장 장치입니다. 변경하면 "signed"플래그가있을 때 -2 ^ (4 * 8-1) = - 2147483648에서 2 ^ (4 * 8-1) -1 = 2147483647이됩니다. 서명되지 않은 플래그는 0에서 2 ^ (4 * 8) -1 사이의 범위를가집니다. MySQL은 BIGINT를 8Bytes 저장 장치로 지원합니다. 값을 더 크게 저장하려고하면 범위의 최대 값을 저장합니다.

  5. ==============================

    5.INT에서 BIGINT로 데이터 유형을 변경하기 만하면됩니다.

    INT에서 BIGINT로 데이터 유형을 변경하기 만하면됩니다.

  6. ==============================

    6.데이터 유형 INT의 최대 값은 2147483647입니다. 삽입하려는 숫자가 2147483647보다 큰 경우 문제가 발생합니다. BIGINT의 최대 값이 9223372036854775807이므로 데이터 유형을 INT에서 BIGINT로 변경하면 문제가 해결 될 수 있습니다. 이 사이트를 한번보세요 : https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

    데이터 유형 INT의 최대 값은 2147483647입니다. 삽입하려는 숫자가 2147483647보다 큰 경우 문제가 발생합니다. BIGINT의 최대 값이 9223372036854775807이므로 데이터 유형을 INT에서 BIGINT로 변경하면 문제가 해결 될 수 있습니다. 이 사이트를 한번보세요 : https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

  7. ==============================

    7.작업 -> 테이블 옵션 -> 증분 값을 최소값으로 변경하거나 증분 할 값을 변경하십시오.

    작업 -> 테이블 옵션 -> 증분 값을 최소값으로 변경하거나 증분 할 값을 변경하십시오.

    autoincrement의 큰 문제는 삽입 값에서 문제가 발생하면 실수로 마지막 항목부터 시작한다는 것입니다. 미리 정의 된 데이터 유형

  8. ==============================

    8.INTEGER에서 BIGINT 로의 데이터 유형 변경에 동의하십시오. 현재 node.js로 웹 앱을 구축 / 아래 리팩토링하는 사람이 '2147483647'로 조작 된 반응식 양식의 전화 번호 게시물을 해결했습니다.

    INTEGER에서 BIGINT 로의 데이터 유형 변경에 동의하십시오. 현재 node.js로 웹 앱을 구축 / 아래 리팩토링하는 사람이 '2147483647'로 조작 된 반응식 양식의 전화 번호 게시물을 해결했습니다.

    clientPhone: {
        type: DataTypes.BIGINT,
        allowNull: true
    },
    
  9. ==============================

    9.

    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;
    
  10. ==============================

    10.가장 쉬운 방법은 MySQL "int"에서 "varchar"로의 변경입니다.

    가장 쉬운 방법은 MySQL "int"에서 "varchar"로의 변경입니다.

  11. from https://stackoverflow.com/questions/10255724/incorrect-integer-2147483647-is-inserted-into-mysql by cc-by-sa and MIT license