franciskane Ответов: 2

Неверное целочисленное значение: "для столбца


I have a problem with a line of sql and php code. I keep getting this error and I'm so confused as to what it is

the problem:

Incorrect integer value: '' for column 'ID' at row 1

the sql code:

CREATE TABLE `attendanceout` (
  `out_ID` int(10) NOT NULL,
  `ID` int(10) NOT NULL,
  `time_out` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `date_info` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `Room` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `attendanceout`
  ADD PRIMARY KEY (`out_ID`);

ALTER TABLE `attendanceout`
  MODIFY `out_ID` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

this is the php script:

$sql = "INSERT INTO attendanceout (out_ID, ID, time_out, date_info, Room)
VALUES ('". $out_id . "', '". $id . "', '" . $time . "', '" . $date. "', '" . $dataSendOut. "')";


Что я уже пробовал:

I already tried to removed the quote in $out_id and $id but a different error appears. 


this is the error that appears if I remove the quote. "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"

2 Ответов

Рейтинг:
0

Patrice T

$sql = "INSERT INTO attendanceout (out_ID, ID, time_out, date_info, Room)
VALUES ('". $out_id . "', '". $id . "', '" . $time . "', '" . $date. "', '" . $dataSendOut. "')";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


franciskane

Должным образом учтено. Завтра я пересмотрю свой кодекс. Спасибо!

Рейтинг:
0

F-ES Sitecore

Вы не ставите Интс в кавычки

VALUES (". $out_id . ", '". ...


Ваш код, вероятно, все еще не будет работать, хотя вы пытаетесь вставить определенное значение в поле auto_increment, что вы не можете сделать. Не пытайтесь вставить значение для out_ID, позвольте базе данных управлять им.


franciskane

Да, я уже удалил кавычки на ints, но когда я это делаю, появляется другая ошибка. и я не пытаюсь вставить значение в БД. Для этого требуется пользовательский ввод.

F-ES Sitecore

Да, "другая ошибка" - это, вероятно, та самая, о которой я предупреждал вас в этом посте :)

franciskane

что вы имеете в виду, когда говорите не вставлять значение для out_ID?

F-ES Sitecore

Вставить в attendanceout (out_ID, ID,

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

Вставить в attendanceout (ID,

и обновите "значения" близко, чтобы удалить значение out_ID оттуда тоже.

franciskane

Я просто уточню. (Извините, английский-не мой родной язык). Я просто удалю out_ID из вставки в?

F-ES Sitecore

Да