0

この例を使用して、PayPal からの情報をデータベースに保存しています。私の問題は、データベースが同じ販売に対して 2 つのレコードを作成することです。同じ売り。

コードのこの部分を変更するにはどうすればよいですか。同じ「txn_id」のセールがある場合は、「payment_status」行を更新するか、新しい情報で更新する前にすべてを削除します。'payment_status' と 'createdtime' の 2 つの行が異なることに注意してください。

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 ;
4

1 に答える 1

4

on を作成UNIQUE INDEXtxn_id(まだ存在しない場合) 、既存の の代わりにINSERT ... ON DUPLICATE KEY UPDATEorを使用します。REPLACEINSERT


アップデート

あなたの場合、一意のインデックスを追加するには:

ALTER TABLE payments ADD UNIQUE INDEX (txnid);

次に、INSERTステートメントの最後に次を追加します。

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

既存のレコードを削除して新しいレコードに置き換えたい場合は、代わりに単語INSERTをに変更してくださいREPLACE

于 2012-05-04T22:38:02.320 に答える