我有两张桌子:
Customer
,字段ID
是自动增量,主键是
address
,字段customer_ID
是外键。
我有一个表格,要求提供所有客户信息及其地址(可以超过1个)
我运行以下两个查询来更新数据库,但是我正在手动输入Customer_ID
的值来测试它。
mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID)VALUES('$line1', '$line2', '$town', '$post_code', '2')") ;
customer_ID
字段应与customer表中的当前ID
字段相同如何确保在填写地址表时自动执行此操作?
答案 0 :(得分:2)
解决问题的最简单方法是在第一次调用mysql_query
(在表客户中插入数据)后,在php代码中调用mysql_insert_id
。< / p>
此函数将返回插入的最后一个ID,但您必须确保 customer 的ID是自动递增的主键。
mysql_insert_id
返回的值对于给定的连接/会话是本地的,即使另一个连接在您输入了ID后插入记录也是如此。
您可以使用SQL函数LAST_INSERT_ID()
,如下所示,只需确保先前的sql-query运行是插入 customer (以及检查以便id确实是一个键,并且自动递增)。
-- first insert into `customer`
INSERT INTO address
address(line_1, line2, town, postcode, customer_ID)
VALUES
('$line1', '$line2', '$town', '$post_code', LAST_INSERT_ID());
与 php-version 相同,LAST_INSERT_ID()
将检索您最后插入的ID。
您还可以使用可以描述为 SELECT INTO 的SQL功能,请参阅以下代码段:
INSERT INTO address
address(line_1, line2, town, postcode, customer_ID)
SELECT
'$line1', '$line2', '$town', '$post_code', customer.id
FROM customer
WHERE <some_constraint>
答案 1 :(得分:1)
你可以(1)在php中使用mysql_insert_id()
,或者在你的sql中直接使用(2)LAST_INSERT_ID()
代码示例1:
mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)
VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
$customer_id = mysql_insert_id();
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID)
VALUES('$line1', '$line2', '$town', '$post_code', {$customer_id})") ;
代码示例2:
mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)
VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID)
VALUES('$line1', '$line2', '$town', '$post_code', LAST_INSERT_ID())") ;