【发布时间】:2018-07-11 02:52:17
【问题描述】:
我正在做一个小项目,我的门票有限,用户可以购买多种数量和不同类型的门票。我需要确保只有当要购买的门票不超过每种类型的可用门票时才会插入交易。
这样做是否足够安全?
$selectAvailableTickets = getTicketAvailability(1,2,3) //Assume that this returns rows of event_id, tickets_available
foreach($selectAvailableTickets as $availableEventTicket){
foreach($ticketsToPurchase as $purchase){
if($purchase->event_id == $availableEventTicket->event_id){
if($purchase->ticket_count > $availableEventTicket){
$hasExceedingPurchase = true;
}
}
}
}
if($hasExceedingPurchase) //Cancel transaction, otherwise, insert and proceed
这样的事情是否足以确保只有在购买不超过该特定类型门票的可用门票时才会进行交易?
我在想,如果有多个用户几乎同时进行交易,如果另一个人买了票并且没有给另一个人还进行了一笔交易,只是碰巧进行了一次比另一笔交易更快的交易。
【问题讨论】:
-
@milo526 感谢您的建议。我想我明白了。但是我是否在交易之外实施条件?比如,在我实现插入之前检查条件?
标签: php mysql database laravel transactions