Я в состоянии, когда я не вижу возможности избежать запроса SELECT
внутри цикла for
, поэтому я прошу здесь.Избегание запроса в конкретном контуре случае
Ситуация такова: Я создаю систему электронной коммерции и реализует систему корзины 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, FROM ITEM_PRICE продуктов WHERE ID = item_number1 ИЛИ ID = item_number2 .... ИЛИ ID = item_numberX, и т.д? Это, по крайней мере, даст вам один SQL-запрос вместо массивного цикла. –
Что делать, если кто-то купил 120 предметов? – Aborted
Нет причин, чтобы он не работал для 120 предметов. Это гораздо эффективнее, чем: 1) Открытие подключения к БД 2) Отправка очень маленький запрос 3) В ожидании ответа 4) Получение данных для малого запроса 5) Закрыть соединение раз X120 –