php - mysql使用第一个表中的auto_increment值作为第二个表中的外键插入到两个表中

标签 php mysql myisam

我要插入到购物车表中

**orderId** | cartId | cartDate | cartStatus
____________________________________________
1           | 1      | 20120102 | complete
2           | 2      | 20120102 | complete
3           | 3      | 20120102 | complete
4           | 4      | 20120102 | complete

使用订单表中的自动递增值orderId

**orderId** | orderStatus | secret   | sauce
____________________________________________
1           | 7          | 020200202 | bbq
2           | 6          | 020200202 | bbq
3           | 6          | 020200202 | t
4           | 4          | 020200202 | m


INSERT INTO ordertable VALUES(null,7,020200202,bbq)

然后使用 orderId(现在为 5)

INSERT INTO carttable VALUES(orderId,20120102,complete)

但是, 此插入必须作为同一查询完成。如果我使用 mysql_last_id (php),那么在执行我的购物车插入之前,其他人有机会插入到数据库中。或者连接可能会超时。数据库是 MyISAM(我无法更改这个,第 3 方解决方案)。

谢谢, J

最佳答案

我认为您对使用 mysql_last_id 的担忧是没有根据的——它将返回当前连接的最后一个 ID,而不是所有连接的全局最后一个 ID。

因此,除非您有多个线程共享同一个数据库连接,或者您在调用 mysql_last_id 之前在同一个连接上执行另一个身份插入,否则您应该没有什么可担心的。

ETA:您可以通过一次发送多个查询来完成此操作,如下所示:

INSERT INTO ordertable VALUES(null,7,020200202,bbq);
INSERT INTO carttable VALUES(LAST_INSERT_ID(),20120102,complete);

但是如果您使用 mysql_query,它通常不会让您在同一个调用中发送多个查询(主要是作为一种安全措施来尝试防止 SQL 注入(inject))。

关于php - mysql使用第一个表中的auto_increment值作为第二个表中的外键插入到两个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10437055/

相关文章:

mysql查询合并一张表上的2个选择

mysql - 将数据从 myisam 复制到 innodb

MySQL 全文搜索和 SOUNDEX

php读取目录并输出修改文件夹的日期

mysql - 如何从数据文件中恢复 MySQL 表?

mysql - 大多数网站使用什么MYSQL表存储引擎?一个支持 FULLTEXT 索引和 RELATIONSHIPS 的索引?

php - 如何为我的 Blade 提供一个变量并将它们保存到一个变量中?

php - MYSQL选择所有具有最近日期的记录

php - jquery 自动完成选项不起作用

php - 在 joomla ADMIN 登录表单中记住我复选框。如何?