Paypal IPN - 存储数据库数据,更新和删除

时间:2012-05-04 22:32:58

标签: php mysql database paypal paypal-ipn

我正在使用this example在数据库中存储来自PayPal的信息,我的问题是数据库为同一次销售创建两条记录,一条状态为“待定”,另一条状态为状态“已完成”,均为同一笔交易。

如何更改代码的这一部分,以便在销售中使用相同的'txn_id'时,我只需更新'payment_status'行或删除整个内容,然后再使用新信息进行更新。请注意,有两行不同,“payment_status”和“createdtime”。

function updatePayments($data){ 
    global $link;
    if(is_array($data)){                
        $sql = mysql_query("INSERT INTO `payments` (txnid, payment_amount, payment_status, item_name, receiver_email, payer_email, custom, itemid, createdtime) VALUES (
                '".$data['txn_id']."' ,
                '".$data['payment_amount']."' ,
                '".$data['payment_status']."' ,
                '".$data['item_name']."' ,
                '".$data['receiver_email']."' ,
                '".$data['payer_email']."' ,
                '".$data['custom']."' ,
                '".$data['itemid']."' ,
                '".date("Y-m-d H:i:s")."' 
                )", $link);
    return mysql_insert_id($link);
    }
}

数据库结构

CREATE TABLE IF NOT EXISTS `payments` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `txnid` varchar(20) NOT NULL,
  `payment_amount` decimal(7,2) NOT NULL,
  `payment_status` varchar(25) NOT NULL,
  `item_name` varchar(50) NOT NULL,
  `receiver_email` varchar(50) NOT NULL,
  `payer_email` varchar(50) NOT NULL,
  `custom` varchar(25) NOT NULL,
  `itemid` varchar(25) NOT NULL,
  `createdtime` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

1 个答案:

答案 0 :(得分:4)

UNIQUE INDEX上创建txn_id(如果已经不存在),然后使用INSERT ... ON DUPLICATE KEY UPDATEREPLACE代替您现有的INSERT


<强>更新

在您的情况下,要添加唯一索引:

ALTER TABLE payments ADD UNIQUE INDEX (txnid);

然后,追加到INSERT声明的末尾:

ON DUPLICATE KEY UPDATE payment_status = '".$data['payment_status']"'

如果您要删除现有记录并将其替换为新记录,只需将INSERT更改为REPLACE即可。