当将新记录插入到具有自动递增ID列的表中时,通常足以将ID字段赋值为NULL或从INSERT查询中省略它,如How to insert new auto increment ID中所述
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();
和下面的,省略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 / ...) - 但是为什么它应该这样做时,这似乎等同于插入数据的非预备语句方式,然后不给任何消息,我不确定。
欢迎任何想法!