锁定行以后,我们需要按照购物车的物品减少对应的库存量。为简便起见,我们对库存不够不报告错误,并把库存变为负数。你可以自己写一个管理页面,查看负数库存的物品,并去订购。
最后,我们更新顾客表中的信用卡,购买信息,合计购买金额,撤掉这个顾客的session。
表五、结账,减库存
<?php
function cart_checkout($credit_card,$address,$name) {
global $conn, $customer_id, $feedback;
// 事务开始
query("begin work");
// 锁住库存表的对应行,用一个简单的子查询来处理。
$sql="select * from item_inventory ".
"where part_number ".
"in (select part_number from cart_items ".
"where customer_id='$customer_id') ".
"for update";
$res=query($sql);
if (!$res || pg_numrows($res)<1) {
$feedback .= pg_errormessage($conn);
$feedback .= ' error - no items locked ';
query("end work");
return false;
} else {
// 库存的某几行已被锁定,从购物车取得物品以及数量。
$sql="select part_number,quantity ".
"from cart_items ".
"where
customer_id='$customer_id' ".
"order by part_number desc";
$res2=query($sql);
| 对此文章发表了评论 |
