【问题标题】:PHP mySQL - Insert new record into table with auto-increment on primary keyPHP mySQL - 将新记录插入表中,主键自动递增
【发布时间】:2011-11-21 11:19:07
【问题描述】:

想知道是否有一个速记版本可以将新记录插入到启用了主键的表中? (即不必在查询中包含键列) 假设键列称为 ID,其他列是 Fname、Lname 和网站

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

【问题讨论】:

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

标签: php mysql insert auto-increment


【解决方案1】:

您还可以对 auto_increment 列使用空白单引号。像这样的东西。它对我有用。

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

【讨论】:

    【解决方案2】:

    使用 DEFAULT 关键字:

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

    另外,您可以指定列,(这是更好的做法):

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

    参考:

    【讨论】:

    • 是的,我知道最好设置每一列。但是这个表不会被改变,所以我只是好奇如何使用最少的代码来完成这个技巧。谢谢!
    • “不会被改变”是一个相当大的假设。也许这是一张一次性的桌子,当您完成当前的任务时,您会放弃它,否则谁知道业务需求何时会以意想不到的方式发生变化。在绝大多数情况下,如果您使用带有列名的第二种形式,接下来必须维护系统的人会非常感激。
    【解决方案3】:
    $query = "INSERT INTO myTable VALUES (NULL,'Fname', 'Lname', 'Website')";
    

    只要留下 AI 主键 NULL 的值,就会分配一个自动递增的值。

    【讨论】:

    • 这确实是一种骇人听闻的行为,并且依赖于 MySQL 将空字符串转换为整数(这不是严格的行为),失败而没有错误(这是可配置的),然后使用 null 作为它通常会(其中 null 成为 DEFAULT 的等效项)。我真的建议不要使用它。
    • 这是一个旧的:P 我已经用 null 而不是空字符串更新了。
    【解决方案4】:

    这是 phpMyAdmin 方法。

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

    【讨论】:

    • 如果你要从 PHP 中给出一个查询,你真的应该让它成为一个参数化查询。
    • 如果您有需要在查询中使用的动态馈送值,是的,请使用准备好的语句。如果插入的所有值都是静态的(并且不包含任何破坏 sql 的字符),那么您可以只使用基本的query()
    【解决方案5】:

    我更喜欢这种语法:

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

    【讨论】:

    • +1,我也喜欢,只适用于 MySQL / 不适用于 SQLite。
    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 2012-02-03
    • 2018-03-21
    • 2012-02-22
    相关资源
    最近更新 更多