2012-05-04 9 views
0

私はthis exampleを使ってデータベースにPayPalからの情報を保存しています。私の問題は、データベースが同じ販売の2つのレコードを作成し、同じ販売のための両方のステータスが「完了」であるものとを含む。PayPal IPN - データベースにデータを保存し、更新して削除する

同じ 'txn_id'の販売がある場合は、 'payment_status'行を更新するだけで、または新しい情報で更新する前にすべてを削除することができます。異なる2つの行、 '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 ; 

答えて

4

(1が存在しない場合)txn_idUNIQUE INDEXを作成し、既存のINSERTの代わりにINSERT ... ON DUPLICATE KEY UPDATEまたはREPLACEのいずれかを使用します。 、そして、

ALTER TABLE payments ADD UNIQUE INDEX (txnid); 

あなたINSERT文の最後に追加します:あなたの場合はUPDATE


は、一意のインデックスを追加し

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

の場合あなたは既存のレコードを削除し、それを置き換えたい新しいものを追加するには、代わりにINSERTという語をREPLACEに変更してください。

+0

質問をデータベース構造で更新するだけですが、例を投稿することはできますか(私はデータベースを初めて使用しています)。 – user983248

+0

@ user983248:上記を参照してください。 – eggyal

+0

オレンジ色のボックスは、1分で回答を受け入れることができると言います。どうもありがとう !!! – user983248

関連する問題