2013-11-21 35 views
0

我處於一個我看不到在for循環內避免SELECT查詢的可能性的位置,因此我在這裏問。迴避特定情況下的查詢

情況是這樣的:我正在創建一個電子商務系統,它實現了貝寶購物車系統。一個用戶支付後,IPN響應看起來是這樣的(縮短):

Array 
(
    [mc_gross] => 8.98 
    [address_status] => confirmed 
    [item_number1] => item_49 
    [tax] => 0.00 
    [item_number2] => item_16 
    [num_cart_items] => 2 
    [address_state] => CA 
    [item_name1] => Tractor 
    [item_name2] => Elegy 
    [quantity1] => 1 
    [quantity2] => 1 
    [txn_type] => cart 
    [mc_gross_1] => 5.99 
    [mc_currency] => USD 
    [mc_gross_2] => 2.99 
    [residence_country] => US 
    [test_ipn] => 1 
    [payment_gross] => 8.98 
) 

正如你看到的,有一些關鍵說法somethingN。這是麻煩開始的地方。

我用的是num_cart_items作爲迭代次數我必須做的,如:

for ($i = 1; $i <= $_POST['cart_num_items']; $i++) 
{ 
    // Do something 
} 

很明顯嘛,現在這個循環中,我能夠訪問在具有N每車項目結束了。我需要的是驗證銷售的產品是否存在欺詐行爲。

我必須從我的數據庫選擇項目的數量從item_numberN價格並將其與它是從PayPal的反應得到的價格。

這個select語句必須發生在這個循環內部,據我所知。

有沒有辦法避免這種情況?

+0

我不擅長PHP,但是不能僅僅在SELECT中執行查詢SELECT item_price FROM WHERE id = item_number1 OR id = item_number2 .... OR id = item_numberX,等等?這至少會給你一個SQL查詢,而不是一個巨大的for循環。 –

+0

如果有人購買了120件物品會怎麼樣? – Aborted

+0

沒有理由不適合120個項目。它比更有效: 1)打開連接到DB 2)發送很小查詢 3)等待響應 4)接收的數據爲小型查詢 5)關閉連接 X120倍 –

回答

0

要避免for循環中的查詢,您必須從ipn響應中收集所有item_numbers。然後,使用這些item_numbers生成帶有IN語句的查詢。例如:

SELECT * FROM `items` WHERE `item_number` IN ('item_49', 'item_16') 
+0

感謝真棒提醒!這是您從編程中休息時得到的。 – Aborted