Ошибка автоинкремента - PullRequest
       4

Ошибка автоинкремента

0 голосов
/ 11 декабря 2018

У меня есть 2 аналогичные таблицы.Один с автоматическим приращением и один без.Первый столбец первой таблицы определен как INT(11), PRIMARY UNIQUE INDEX, а в разделе EXTRA в phpmyadmin указано AUTO_INCREMENT.

. Этот код не работает и не добавляет никаких значений.

mysqli_query($con, "INSERT INTO testtable1 VALUES ('', 'zzz', 'yyy')") ;

Вторая таблица - это та же таблица, в которой первый столбец удален.Этот код работает.

mysqli_query($con, "INSERT INTO testtable2 VALUES ('jjj', 'fff')") ;

Есть идеи, что мне не хватает?Запуск 7.2 в базе данных.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Предположительно, ваше testtable1 имеет определение, разумно похожее на (псевдо-запись):

testtable1
------------
ID             INT      PK AUTOINCREMENT
SomeColumn     NVARCHAR
AnotherColumn  NVARCHAR

Так что, когда вы делаете это:

INSERT INTO testtable1 VALUES ('', 'zzz', 'yyy')

Вы явно говоритебаза данных для вставки пустой строки в столбец INT.Что не сработает.

Столбец AUTOINCREMENT не нужно указывать, что есть пустое значение, он будет автоматически увеличиваться.Просто укажите значения, которые вы вставляете:

INSERT INTO testtable1 (SomeColumn, AnotherColumn) VALUES ('zzz', 'yyy')

Пусть ядро ​​базы данных обрабатывает столбец ID.В общем, всегда стоит явно указать столбцы, в которые вы вводите значения или из которых вы выбираете значения.Это делает код более легким для чтения / поддержки и уменьшает вероятность ошибок / ошибок, если определение таблицы когда-либо немного изменяется.

0 голосов
/ 11 декабря 2018

Если я правильно читаю, в первой таблице есть int (11) с AUTO_INCREMENT.

Это означает, что вы должны использовать запрос, аналогичный приведенному в таблице 2. Как и в случае передачи только значений для двух полей без автоинкрементов.

mysqli_query($con, "INSERT INTO testtable1 VALUES ('zzz', 'yyy')") ;

Это будет работать до тех пор, пока есть 3 поля, первое - auto inc int, а два других - строки.Это связано с тем, что auto inc автоматически обрабатывает первый столбец.

Также, пожалуйста, просмотрите эту ссылку или найдите php MySQL предшествующие операторы, чтобы использовать подготовленные операторы вместо этого для некоторой безопасности.Это поможет вам против инъекций sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...