Хорошо, поэтому я работал с API веб-интерфейса Steam, у меня есть одно из значений, хранящихся в переменной под названием $steam64
. Когда я использую этот обработчик кода для ввода INSERT в базу данных 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 . Я бы рекомендовал преобразовать ваш столбец в хэш-файл varchar(100)
а не в int, или переключиться на 64-битную систему. Отличная статья о max ints здесь , и здесь .
2147483647 – наибольшее значение int для mysql. Просто измените тип от int до bigint.
В то время как я играл с SQL, и MySQL имел ту же проблему с типом данных MySQL int. Изменение типа данных из int в фиксированную проблему bigint .
Типы MySQL Integer 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
до 2^(4*8)-1
. MySQL поддерживает BIGINT в качестве хранилища 8Bytes. Если вы попытаетесь сохранить значение больше, вы сохраните максимальное значение диапазона
Перейдите в операции-> параметры таблицы -> измените значения приращения на минимальное или любое другое значение, которое вы хотите увеличить.
большая проблема автоинкремента заключается в том, что она начинается с последней записи по ошибке, если ее очень большое значение затем запускает проблему в значение insert .. с нашим предопределенным типом данных
Согласитесь с изменением типа данных в BIGINT от INTEGER. В настоящее время создание веб-приложения с node.js / sequelize ниже рефакторе решает номер телефона номер из реакции-редукция формы, манипулируемой с '2147483647':
clientPhone: { type: DataTypes.BIGINT, allowNull: true },
Наибольшее значение для типа данных INT – 2147483647. Если номер, который вы вставляете, больше, чем 2147483647, это вызовет проблему. Для решения измените тип данных с INT на BIGINT, поскольку BIGINT имеет максимальное значение 9223372036854775807, это может решить вашу проблему. Посмотрите этот сайт: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html
Самый простой способ – это изменение в MySQL «int» на «varchar».
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;