【问题标题】:How to get result of Insert如何获得插入的结果
【发布时间】:2025-12-15 13:50:01
【问题描述】:

这是一个相当基本的问题,我目前有两个表,在第二个表中有一个表 A 的外键列。

表 A:

id       Name
----------------
1        Name1
2        Name2

表 B:

id       Name      Parent
-------------------------
1        John      1

会发生什么:

  • 我的 PHP 脚本将 Name1 插入到表 A 中,mysql 插入 id。
  • 我的 PHP 脚本需要将 John 插入表 B 并将 Parent 设置为刚刚插入的查询的 id

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

    第一次插入后,你可以这样做:

    $res = mysql_query('SELECT LAST_INSERT_ID()');
    $row = mysql_fetch_array($res);
    $lastInsertId = $row[0];
    

    或者,您可以使用mysql_insert_id。但是,从手册中:

    mysql_insert_id() 将转换 本机 MySQL C API 的返回类型 函数 mysql_insert_id() 到一个类型 long(在 PHP 中命名为 int)。如果你的 AUTO_INCREMENT 列有一个列 BIGINT 类型(64 位) 转换可能会导致不正确 值。 相反,使用内部 MySQL SQL 函数 LAST_INSERT_ID() 在 SQL 查询。

    因此,如果您的专栏使用 -- 或将来可能使用 -- BIGINT,我列出的第一种方法是首选。

    【讨论】:

    • 请注意,mysql_insert_id() 的作用完全相同。
    • @Vincent Savard:如果数据类型是 BIGINT,则不是
    【解决方案2】:

    您可以使用mysql_insert_id() 获取最后插入的id。

    mysql_insert_id — 获取生成的 ID 在最后一个查询中

    注意:

    mysql_insert_id() 将转换 本机 MySQL C API 的返回类型 函数 mysql_insert_id() 到一个类型 long(在 PHP 中命名为 int)。如果你的 AUTO_INCREMENT 列有一个列 BIGINT 类型(64 位) 转换可能会导致错误 价值。相反,使用内部 MySQL SQL 函数 LAST_INSERT_ID() 在 SQL 查询。有关更多信息 PHP的最大整数值,请 请参阅整数文档。

    示例:

    mysql_query("INSERT INTO ..........");
    printf("Last inserted record has id %d\n", mysql_insert_id());
    

    【讨论】:

      【解决方案3】:

      使用mysql_query 执行INSERT 查询后,您可以使用mysql_insert_id 获取用于先前插入的行的ID。

      【讨论】: