【发布时间】:2013-12-05 06:57:17
【问题描述】:
我目前处于无法避免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 的回复中收到的价格进行比较。
据我所知,这个选择语句必须发生在这个循环中。
有没有办法避免这种情况?
【问题讨论】:
-
我不擅长 PHP,但你不能简单地在 SQL 中进行查询,比如 SELECT item_price FROM products WHERE id = item_number1 OR id = item_number2.... OR id = item_numberX 等?这至少会给你一个 SQL 查询,而不是一个庞大的 for 循环。
-
如果有人买了120件怎么办?
-
没有理由它不适用于 120 件商品。它比以下效率高得多:1)打开与 DB 的连接 2)发送非常小的查询 3)等待响应 4)接收小查询的数据 5)关闭连接 x120 次
-
请给我一个包含 120 个购物车项目的演示,我想看看。
标签: php mysql sql loops paypal