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

标签 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 ;

最佳答案

txn_id 上创建一个 UNIQUE INDEX(如果尚不存在),然后使用 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

关于php - Paypal IPN - 在数据库中存储数据,更新和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456969/

相关文章:

php - SQL select 和 array 不起作用

php - 从选择查询 php 返回结果数组

php - 将包含数组的表单数据安全插入 mysql 数据库

php - 插入数据库不起作用

database - 访问通过数据库链接在数据库中创建的表同义词

mysql - 触发以将 N 个默认值插入行

php - 无法使用 PHP mail() 发送 HTML 邮件

javascript - Img 源设置为数据不起作用

php - PHP形式调用Action中定义的 "SignUp.php"页面函数失败?

php - 插入多对多数据库和取消背后的逻辑