new customer row ';
query("ROLLBACK");
return false;
} else {
//commit this transaction
query("COMMIT");
return true;
}
}
}
?>
这段代码比较长,虽然我不是很喜欢,但是它演示了怎样正确开始和结束Postgres 的事务以及怎样检查查询语句的错误。我要在所有的代码用到同样的错误监测程序,我想,你也应该如此。
需要计划好如果查询出错的处理办法,你是直接终止程序呢?还是重新运行查询语句,抑或继续执行,就当什么也没有发生?仔细考虑每种选择的结果。例如,如果不能得到下一个顾客的customer_id ,那么,建立新顾客的记录也就泡汤,接下来就是不能更新她的地址,不能往购物车里添加物品,对吧?
现在,我们看看添加物品的过程,这个步骤相对比较容易,在添加物品之前,要先检查物品是否在数据库中。这样比较安全,因为物品号码来自浏览器,可能被篡改。一旦知道物品存在,我们就能测试它是否已经在购物车里,如果已经放入,那么数量加一,而不是另外插入一行,否则,插入一条数量为一的记录到购物车。
表四、添加物品到购物车
<?php
function cart_add_item($item_id,$quantity=1) {
global $customer_id, $feedback, $conn;
$res=query("SELECT * FROM item_inventory WHERE part_number='$item_id'");
if (!$res || pg_numrows($res)<1) {
$feedback .= pg_errormessage($conn);
$feedback .= ' Error-item not found ';
return false;
} else {
// 检查物品是否放入购物车,如果是,增加数量
// 开始事务
query("BEGIN WORK");
$res=query("SELECT * FROM cart_items ".
"WHERE part_number='$item_id' AND customer_id='$customer_id' FOR UPDATE");
if (!$res || pg_numrows($res)<1) {
//如果没有该物品,新插入一条
$res=query("INSERT INTO cart_items ".
"(customer_id,part_number,quantity)".
query("ROLLBACK");
return false;
} else {
//commit this transaction
query("COMMIT");
return true;
}
}
}
?>
这段代码比较长,虽然我不是很喜欢,但是它演示了怎样正确开始和结束Postgres 的事务以及怎样检查查询语句的错误。我要在所有的代码用到同样的错误监测程序,我想,你也应该如此。
需要计划好如果查询出错的处理办法,你是直接终止程序呢?还是重新运行查询语句,抑或继续执行,就当什么也没有发生?仔细考虑每种选择的结果。例如,如果不能得到下一个顾客的customer_id ,那么,建立新顾客的记录也就泡汤,接下来就是不能更新她的地址,不能往购物车里添加物品,对吧?
现在,我们看看添加物品的过程,这个步骤相对比较容易,在添加物品之前,要先检查物品是否在数据库中。这样比较安全,因为物品号码来自浏览器,可能被篡改。一旦知道物品存在,我们就能测试它是否已经在购物车里,如果已经放入,那么数量加一,而不是另外插入一行,否则,插入一条数量为一的记录到购物车。
表四、添加物品到购物车
<?php
function cart_add_item($item_id,$quantity=1) {
global $customer_id, $feedback, $conn;
$res=query("SELECT * FROM item_inventory WHERE part_number='$item_id'");
if (!$res || pg_numrows($res)<1) {
$feedback .= pg_errormessage($conn);
$feedback .= ' Error-item not found ';
return false;
} else {
// 检查物品是否放入购物车,如果是,增加数量
// 开始事务
query("BEGIN WORK");
$res=query("SELECT * FROM cart_items ".
"WHERE part_number='$item_id' AND customer_id='$customer_id' FOR UPDATE");
if (!$res || pg_numrows($res)<1) {
//如果没有该物品,新插入一条
$res=query("INSERT INTO cart_items ".
"(customer_id,part_number,quantity)".
| 对此文章发表了评论 |
