我正在处理Google Checkout API通知网址。我想在我的php代码中应用一个检查,它将查看我的数据库的事务表中是否存在事务ID,它将退出而不是进程。
我正在努力申请这里。有人可以帮忙吗?
我想检查它将退出的DB表中是否存在trasaction ID,它将不会处理:
case "new-order-notification":
$sql = "
UPDATE
transactions
SET
remote_trans_id=\"".$_REQUEST["google-order-number"]."\", updated=NOW()
WHERE
id=".$_REQUEST["shopping-cart_items_item-1_merchant-item-id"]
;
execute($sql, $conn);
break;
此致
答案 0 :(得分:1)
只需使用INSERT ON DUPLICATE KEY UPDATE即可。这样mySql会为你做检查,如果是新事务将输入它,否则将更新现有条目。
答案 1 :(得分:0)
将id
的索引设置为唯一答案 2 :(得分:0)
如果您尝试避免在用户点击浏览器上的刷新或后退按钮时进行双重处理,则可能有更好的方法来处理此问题。
在脚本的顶部,在会话变量中创建temp uniqid。
session_start();
$_SESSION['temp_page_instance'] = uniqid();
然后,在您的表单中,创建一个名为page_instance的隐藏输入,它将等于temp_page_instance。
<input type="hidden" name="page_instance" value="<?php echo $_SESSION['temp_page_instance']; ?>" />
然后,在脚本的底部设置实际的页面实例。
$_SESSION['page_instance'] = $_SESSION['temp_page_instance'];
在处理表单数据的逻辑中,在那里放置一个检查,确保你的$ _POST ['page_instance'] == $ _SESSION ['page_instance']。如果没有,则页面已重新加载,并且不应再次处理该表单。
这有帮助吗?
答案 3 :(得分:-1)
您可以选择所有ID,将它们放在一个关联数组中(也可以将其保存在带序列化的文件中,而不是总是转到表中),如:
$all_ids = array(
'id1' => 1,
'id2' => 1,
etc..
然后当你想检查一个id是否存在时,你只需要
if (isset($all_ids[$id])) { ... }
希望这会有所帮助:)