2013-03-11 38 views
0

我正在開發一個拍賣系統的限制或使用PHP的MySQL(MyISAM數據)和PDO最高出價的情況下,用兩個表PHP MySQL的PDO招標拍賣

拍賣

Id | title | seller | currentbid | limit(max bid) | dated | bidder 

投標

Id | auctionid | bid | bidder | dated 

用戶下了投標後,發生以下情況(我正在使用PDO準備的語句S)

$record = fetch (‘Select * from auction where id = :id’, array(‘id’ => $id)) 
$increment = 1; 
$postedBid = $_REQUEST[‘postedBid’]; 
$currentBid = $record[‘currentbid’]; 
$limitBid = $record[‘limit’]; 

If($postedBid < $currentBid + $increment){ 
    Return;(without processing bid!) 
}else{ 
    If($limitBid !> $postedBid){ 
     Insert into bids (auctionid, bid, bidder, dated(timestamp)) values ($auctioned, $postedBid, ……); 

     Update auction set currentbid = $postedBid, limit = $postedBid …. 

     }else{ 

     Insert into bids (auctionid, bid, bidder, dated(timestamp)) values ($auctioned, $postedBid, ……); 

     Insert into bids (auctionid, bid, bidder, dated(timestamp)) values ($auctioned, $postedBid + $increment, ……); 

     Update auction set currentbid = $postedBid + increment, limit = $limitBid …. 
     } 
    } 

我想知道兩件事情

1-如果這個方法是好的,我怎樣才能改善這種

2 - 我怎樣才能避免同時投標。我不知道如何使用PDO來應用鎖。欣賞使用鎖或任何其他的辦法來處理這個問題

感謝

(道歉使用混合類型的代碼)

回答

0

我認爲你有必要做這個存儲過程在什麼任何例子查詢簡單地返回成功/失敗消息的MySQL。

你需要改變你的代碼是這樣的:

If($postedBid < $currentBid + $increment){ 
    Return;(without processing bid!) 
} else { 
    $stmt = $db->prepare("CALL update_bid(?,?, ...)"); 
    $stmt->execute(array($parameter1, $parameter2, ...)); 
} 

讓你檢查的代碼以及幫助避免不必要的數據庫調用,存儲過程只會有助於確保沒有併發問題。

+0

嗯,其實我是一個新手到MySQL不知道它有程序設施,我一定會考慮它。感謝 – Shah 2013-03-11 08:02:49

+0

存儲過程的「基本支持」存在於5.0.0中 – Talon 2013-03-11 08:27:11