【问题标题】:How to GET id if it's not added to database yet? (mysql)如果尚未将其添加到数据库中,如何获取 id? (mysql)
【发布时间】:2014-12-28 15:24:36
【问题描述】:

例如我有两个数据库:

客户表(id自动增加)

---------------------------------------
----- id ----- name ----- surname -----
----- 1  ----- BOB  ----- test1   -----
----- 2  ----- Jhon ----- test2   -----
----- 3  ----- Nick ----- test3   -----
---------------------------------------

和产品表(id不为空,必须手动添加)

---------------------------------------------
----- id ----- product ----- date       -----
----- 1  ----- orange  ----- 10/10/2014 -----
----- 2  ----- apple   ----- 12/10/2014 -----
----- 3  ----- melon   ----- 26/10/2014 -----
---------------------------------------------

*EXAMPLE 组成我有更复杂和更大的表。

问题是:

使用一个 add.php 文件我想添加

姓名 = ____ 姓氏 = _____

在从添加姓名和姓氏(来自表 customer )的字段中获取 id 并使用它使用相同的 id 添加产品和日期(到产品表)之后。

我了解如何向多个表格添加信息:HERE

但是如何将信息添加到表 1 并在使用 table1 中的 ID 后添加 tables2 这是我感到困惑的地方。

【问题讨论】:

  • 使用 mysqli_insert_id() 从上次查询中获取 id
  • @AleksandarVasić:这就是答案!您也可以选择最高 id (max(id)),但使用 mysql_insert_id() 是更简洁的方式。用谷歌搜索一下也可以回答这个问题。
  • 请如果可能的话,你能做一个简单的,只是使用mysqli_insert_id()的简单例子。以我的问题为样本。
  • 为什么不自动增加产品ID?
  • @C4ud3x 小心,max(id) 解决方案留下了潜在的竞争条件,可能会在繁忙的系统中损坏数据完整性。

标签: php mysql database mysqli insert


【解决方案1】:

要插入第一行,请照常使用此查询。

INSERT INTO customer (name, surname) 
              VALUES ('Marie', 'Antoinette')

它将为您的连接设置LAST_INSERT_ID() 值。然后插入下一行,使用这个查询,它包含LAST_INSERT_ID()

INSERT INTO product (customer_id, product, date)
             VALUES (LAST_INSERT_ID(), 'Cake', '1770-04-18')

这使您可以在不显式检索LAST_INSERT_ID 的情况下进行第二次插入。但是,如果您有多个 product 行供一位客户使用,则您的 SQL 中需要稍有不同。

INSERT INTO customer (name, surname) 
              VALUES ('Marie', 'Antoinette');

SET @custid =: LAST_INSERT_ID();

INSERT INTO product (customer_id, product, date)
             VALUES (@custid, 'Cake', '1770-04-18')
INSERT INTO product (customer_id, product, date)
             VALUES (@custid, 'Guillotine', '1770-04-19')

这是一种很好的做事方式,因为它可以在一个繁忙的系统上正常工作,其中可能有多个数据库客户端插入客户。 LAST_INSERT_ID() 由 MySQL 连接维护。这也很好,因为您不必检索然后发回最后插入的 id 值。

【讨论】:

    【解决方案2】:

    使用mysql_insert_id(); 为您提供最后一个查询的 id

    http://php.net/manual/en/function.mysql-insert-id.php

    来自 php.net 的示例

    <?php
    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
    mysql_select_db('mydb');
    
    mysql_query("INSERT INTO mytable (product) values ('kossu')");
    printf("Last inserted record has id %d\n", mysql_insert_id());
    ?>
    

    所以基本上你执行第一个查询,使用mysql_insert_id() 获取 id 并编写第二个查询

    【讨论】:

    • $myid = mysql_insert_id();并且您将在 $myid 中获得上次查询的 id
    • 你不需要添加链接作为参数,因为默认链接是连接的 lat
    • @Denis 仔细看看,你链接到的是mysqli_insert_id,而不是mysql_insert_id。如果您使用的是 mysqli,那么是的,链接是必需的,或者直接使用 $link-&gt;insert_id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多