我处于一个我看不到在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语句必须发生在这个循环内部,据我所知。
有没有办法避免这种情况?
我不擅长PHP,但是不能仅仅在SELECT中执行查询SELECT item_price FROM WHERE id = item_number1 OR id = item_number2 .... OR id = item_numberX,等等?这至少会给你一个SQL查询,而不是一个巨大的for循环。 –
如果有人购买了120件物品会怎么样? – Aborted
没有理由不适合120个项目。它比更有效: 1)打开连接到DB 2)发送很小查询 3)等待响应 4)接收的数据为小型查询 5)关闭连接 X120倍 –