Поэтому у меня есть база данных в MySQL с тремя столбцами. Первый столбец – «idnum», который автоматически увеличивает число идентификаторов пользователей. Второй и третий – это фамилия и имя. Моя проблема в том, когда я отправляю имена в БД через строку запроса в моем PHP-файле, я получаю пару разных ошибок обратно …
Когда я отправлю запрос:
$sql = "insert into namesdb values('NULL', 'firstname', 'lastname')"; $result = $db->query($sql);
Я возвращаю эту ошибку: «Неверное целочисленное значение:« NULL »для столбца« idnum »в строке 1.» Поскольку столбец 1 является типом INT.
Но затем, когда я отправляю этот запрос:
$sql = "insert into namesdb values(".NULL.", 'firstname', 'lastname')"; $result = $db->query($sql);
Я возвращаю синтаксическую ошибку …
Любая идея о том, что я тут делаю неправильно?
Спасибо за любую помощь!
Должен быть:
$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')"; $result = $db->query($sql);
'NULL'
– это строка "NULL"
.
Хотя другой вариант (тот, который я бы использовал), должен явно указывать столбцы:
INSERT INTO namesdb (firstname, lastname) VALUES ('firstname', 'lastname')
Я предпочитаю перечислять столбцы, потому что это более надежное будущее, и легче понять, что происходит. Представьте, если столбцы будут перегруппированы, добавлены или удалены в будущем. Внезапно исправление ваших запросов будет огромной болью, если вам придется удалить 6-й неназванный параметр везде (например).
Его лучше указать имена полей, которые вы хотите вставить, и не указывать поле id
как
insert into namesdb(firstname,lastname) values('firstname', 'lastname')
Он автоматически увеличит ваше поле id
Вы можете написать запрос таким образом, чтобы избежать этой проблемы.
$sql = "INSERT INTO table_name SET column_name_1 = 'value_1', column_name_2 = 'value_2'";
$sql = "insert into namesdb values('NULL', 'firstname', 'lastname')";
В вышеприведенном запросе «NULL» представляет собой строковый объект, а ваш столбец является Integer, поэтому ошибка.
$sql = "insert into namesdb values(".NULL.", 'firstname', 'lastname')";
В этом запросе вы отправляете значение php NULL, поэтому окончательный запрос выглядит следующим образом:
"insert into namesdb values(, 'firstname', 'lastname')";
Поэтому он недействителен.
Правильный способ вставки должен быть таким
$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')";
или как это
$sql = "insert into namesdb values('firstname', 'lastname')";
Причина, по которой работает запрос выше, связана с автоматическим приращением.