Неверное целое число (2147483647) вставляется в MySQL?

хорошо, поэтому я играл с веб-API Steam, у меня есть одно из значений, хранящихся в переменной $steam64. Когда я использую этот код, чтобы вставить его в базу данных mysql, он вставляет целое число, отличное от того, что хранится в переменной.

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

var_dump($steam64); возвращает реальный int, так же как и его эхо. Не слишком уверен, что здесь происходит, любая помощь приветствуется.

10 ответов


это, вероятно, потому, что вы обертываете запрос в двойные кавычки, но переменная находится в одинарных кавычках, поэтому она рассматривается как литерал, и если столбец int, вы получите 0 вместо этого.

попробуйте это:

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

кроме того, прежде чем я вспыхну, обязательно прочитайте на SQL-инъекций в случае, если вы не дезинфицируете переменные, которые публикуются непосредственно в операторах sql.

-- Update --

на основе ваших комментарий "значение сбрасывается"; число, которое вы пытаетесь вставить, слишком велико для 32-разрядных систем. Максимальное значение для 32-бит -4,294,967,295, и Макс для 64-бит 18,446,744,073,709,551,615. Я бы рекомендовал преобразовать ваш столбец в varchar(100) хэш, а не int, или перейти на 64 битную систему. большой статья о max ints здесь и здесь.


2147483647 является самым большим значением int для mysql. Просто измените тип с int на bigint.


пока я играл с SQL и MySQL, у меня была та же проблема с типом данных MySQL int. Изменение типа данных int to тип bigint Исправлена проблема.

целочисленные типы MySQL http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

ALTER TABLE tablename MODIFY columnname BIGINT; 

целочисленный тип INT это 4bytes хранения, вы получаете от -2^(4*8-1)=-2147483648 до 2^(4*8-1)-1=2147483647, если у вас есть "подпись" флаги, если вы измените флаги на без подписи у вас будет ряд от 0 to 2^(4*8)-1 . MySQL поддерживает BIGINT, являющийся хранилищем 8Bytes. Если вы попытаетесь сохранить значение больше, вы сохраните максимальное значение диапазона


просто измените тип данных с INT на BIGINT


наибольшее значение для типа данных INT-2147483647. Если число, которое вы вставляете, больше 2147483647, это вызовет проблему. Для решения измените тип данных с INT на BIGINT, поскольку BIGINT имеет максимальное значение 9223372036854775807, это может решить вашу проблему. Посмотрите на этот сайт: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html


перейти к операции - > параметры таблицы - > изменить значения приращения к минимуму или все, что вы хотите увеличить..

большая проблема автоинкремента-это начать с последней записи по ошибке, если ее очень большое значение, а затем запустить проблему в значении вставки.. с нашим предопределенным типом данных
enter image description here


согласен с изменением типа данных на BIGINT из INTEGER. В настоящее время создается веб-приложение с node.js / sequelize ниже рефакторинг решил номер телефона сообщение из формы react-redux манипулируется на "2147483647":

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

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;

самый простой способ-изменить MySQL "int"на " varchar".