PHP mySQL - 在带有自增主键的表中插入新记录

51

想知道是否有一种简写方式可以向启用主键的表中插入新记录?(即不必在查询中包含键列) 假设键列被称为ID,其他列为Fname、Lname和Website。

$query = "INSERT INTO myTable VALUES ('Fname', 'Lname', 'Website')";

你已经得到了正确的答案。你的示例应该按预期工作(假设ID是自动递增的)。 - konsolenfreddy
1
@konsolenfreddy:他正在使用需要指定每个列值的插入语法。 - webbiedave
2
我建议不要在应用程序中使用这种插入语法,因为如果您在将来添加列(或更改列顺序),则必须返回并更改SQL语句,即使这些列具有默认值。如果只是一次性的数据库更新,那就没什么大不了的。 - webbiedave
5个回答

112

使用DEFAULT关键字:

$query = "INSERT INTO myTable VALUES (DEFAULT,'Fname', 'Lname', 'Website')";

此外,您可以指定列(这是更好的实践方法):

$query = "INSERT INTO myTable
          (fname, lname, website)
          VALUES
          ('fname', 'lname', 'website')";

参考资料:


是的,我知道最好设置每一列。但是这个表不会被更改,所以我只是好奇如何使用最少的代码来完成任务。谢谢! - JimmyJammed
5
“将不会被更改”是一个相当巨大的假设。也许这只是一张临时表格,你完成当前任务后就把它丢掉了,但如果业务需求在意想不到的方式下发生变化,谁知道会发生什么。在绝大多数情况下,下一个需要维护系统的人会非常感激如果你使用第二种带有列名的形式。 - GrandOpener

12

我更喜欢这种语法:

$query = "INSERT INTO myTable SET fname='Fname',lname='Lname',website='Website'";

3
+1,我也喜欢它,但只适用于MySQL,而在SQLite中不起作用。 - Alix Axel

6
$query = "INSERT INTO myTable VALUES (NULL,'Fname', 'Lname', 'Website')";

如果将AI主键的值保留为NULL,则会分配一个自动增加的值。


这种行为真的很不专业,它依赖于MySQL将空字符串转换为整数(这不是严格的行为),在没有错误的情况下失败(这是可配置的),然后像通常一样使用null(其中null成为DEFAULT的等效项)。我真的建议永远不要使用这个。 - scragar
2
这是一个老的 :P 我已经更新了,用 null 替换了空字符串。 - Korvin Szanto

3

这是phpMyAdmin方法。

$query = "INSERT INTO myTable
         (mtb_i_idautoinc, mtb_s_string1, mtb_s_string2) 
         VALUES
         (NULL, 'Jagodina', '35000')";

1
如果你要从PHP中发出查询,你应该真正将其作为参数化查询。 - GrandOpener
如果您有需要在查询中使用的动态提供的值,那么请使用预处理语句。如果所有要插入的值都是静态的(且不包含任何破坏 SQL 的字符),则可以直接使用基本的 query() - mickmackusa

0

您还可以使用空白单引号作为 auto_increment 列。像这样。对我有用。

$query = "INSERT INTO myTable VALUES ('','Fname', 'Lname', 'Website')";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接