如果没有添加到数据库,如何获取ID? (MySQL的)

时间:2014-11-01 12:38:21

标签: php mysql database mysqli insert

例如,我有两个数据库:

客户表(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 -----
---------------------------------------------

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

问题是:

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

姓名= ____ 姓氏= _____

并且在添加了姓名和姓氏(来自表客户)的字段中使用GET id之后,使用相同的ID添加产品和日期(到产品表)。

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

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

2 个答案:

答案 0 :(得分:2)

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

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值。

答案 1 :(得分:1)

使用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并写第二个查询