这是场景。此表 Orders 有一个名为orders_id 的自动增量列。该表使用InnoDB存储引擎。 (这不是关于在 Orders 表中插入新记录,而是关于如何避免向处理器发送重复的 ID)
orders_id cust_id name address
100 55 abc 123 street
101 12 def 456 street
对于下一个订单,我会像这样计算下一个可用的 Orders_id
$new_order_id_query = "SHOW TABLE STATUS LIKE ORDERS";
$result = tep_db_query($new_order_id_query);
$row = tep_db_fetch_array($result);
$new_order_id = $row['Auto_increment'];
然后我收集其他信息,例如姓名、地址、订购的商品...并将其发送到支付处理商,如下所示
102 44 xyz 44 Street
问题是仅有时当完全相同的时间有两个或多个订单时,我最终会将两个具有相同orders_id的订单发送到付款处理器。
问题是如何确保我不会向付款处理机构发送重复的 Orders_id?
有人建议我使用last_insert_id(),这可能是对的,也可能是错的,但我不知道如何实现它。
我读到了有关锁定表的内容 - 这对于事务环境和 InnoDB 来说是个好主意吗?如果可以的话我该如何实现?
最佳答案
如 my answer to your last question 中所述:
收集姓名、地址、订购的商品等。
将相关详细信息插入到
orders
表中,省略提供id
(MySQL会自动为您生成一个,通过使用锁来保证其唯一性) )。通过向 MySQL 询问
last_insert_id
来获取生成的id
(实际的函数调用将取决于您的驱动程序)。发送至您的付款处理方。
关于php - 重复的 ID 被发送至支付处理商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899666/