避免在特定于循环的情况下进行查询


Avoiding query in loop - specific case

我认为不可能在for循环中避免SELECT查询,因此我在这里询问。

情况是这样的:我正在创建一个电子商务系统,它实现了Paypal购物车系统。用户付款后,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语句必须发生在这个循环中。

有办法避免这种情况吗?

为了避免for循环中的查询,您必须从ipn响应中收集所有item_numbers。然后,使用这些item_numbers生成一个带有IN语句的查询。例如:

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