php - 重复的 ID 被发送至支付处理商

标签 php mysql transactions oscommerce

这是场景。此表 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 中所述:

  1. 收集姓名、地址、订购的商品等。

  2. 将相关详细信息插入到orders表中,省略提供id(MySQL会自动为您生成一个,通过使用锁来保证其唯一性) )。

  3. 通过向 MySQL 询问 last_insert_id 来获取生成的 id(实际的函数调用将取决于您的驱动程序)。

  4. 发送至您的付款处理方。

关于php - 重复的 ID 被发送至支付处理商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899666/

相关文章:

PHP - SimpleXML 解析错误

mysql - 使用字母大小写获取精确值

mysql - 嵌套的 MySQL 查询和字母数字排序

java - H2 是否支持可序列化隔离级别?

java - Hibernate save() 和事务回滚

php - polymer 和 PHP

php - CodeIgniter 3 MySQL 查询随机间歇性工作

php - 多对多 Doctrine

所有值都相同的 MySQL GROUP_CONCAT

c# - TransactionScope 中的 Membership.GetUser() 抛出 TransactionPromotionException