При вставке новой записи в таблицу с индексом автоинкрементного идентификатора обычно достаточно указать поле идентификатора NULL или опустить его из запроса INSERT, как описано в разделе Как вставить новый идентификатор автоматического увеличения
INSERT INTO `database`.`table` (`id`, `user`, `result`) VALUES (NULL, 'Alice', 'green')");
или
INSERT INTO `database`.`table` (`user`, `result`) VALUES ('Alice', 'green')");
Мой вопрос: как вы делаете то же самое при использовании подготовленных операторов. Я попробовал следующее, используя NULL:
$stmt = $db->prepare("INSERT INTO `db` (id, name, password, text) VALUES (NULL, ?, ?, ?)"); $stmt->bind_param('sss', $name, $password, $text); $stmt->execute();
и fowllowing, опустив поле ID:
$stmt = $db->prepare("INSERT INTO `test_db` (name, password, text) VALUES (?, ?, ?)"); $stmt->bind_param('sss', $name, $password, $text); $stmt->execute();
Когда я запускаю это, я ничего не добавляю и в браузере не появляется сообщение об ошибке. Я думаю, это связано с тем, что он пытается вставить дублирующее значение для поля ID (stackoverflow.com/questions/12179770/…), но почему он должен делать это, когда это кажется эквивалентным способу ввода данных без подготовки , а затем не сообщайте, я не уверен.
Любые идеи приветствуются!