magento делает несколько соединений с базой данных без потери значений массива - PullRequest
0 голосов
/ 25 июля 2011

Я пытаюсь установить соединение с двумя различными базами данных, поэтому мой сценарий должен работать следующим образом

  1. Найти все заказы для текущего зарегистрированного клиента, где состояние заказа завершено, этовиртуальный продукт и он имеет идентификатор заказа juno (этот запрос работает нормально)

  2. Соберите все идентификаторы заказа, которые были найдены, и сохраните их в массиве (это прекрасно работает)

  3. теперь подключается к sales_order_items и для каждого элемента, являющегося частью идентификатора заказа, проверяет, есть ли в базе данных ссылка на скачивание URL,

  4. , еслинет, я не буду подключаться к API -

проблема в том, что когда я хочу установить второе соединение, мне кажется, что я теряю все значения, хранящиеся в массиве $ orderIds.

Я искал решения, но я довольно новичок в Zend Framework

Любая помощь будет высоко ценится

Мой сценарий выглядит следующим образом

<code>        $conn = Mage::getSingleton('core/resource')->getConnection('core_write');
    $result = $conn->query('select * from sales_flat_order WHERE customer_id='.$session->getCustomerId().' AND state="complete" AND is_virtual=1 AND juno_order_id!="null"');

    $orderIds=array();

    foreach ($result as $orderId)
    {
    $orderIds[]=$orderId[entity_id];    

    $itemsonOrder=$conn->query('select * from sales_flat_order_items WHERE order_id='.$order[entity_id]);



    }



// value of first array $orderIds gets lost if i make annother connection using $conn
        echo 'items on order';
        print_r($itemsonOrder);
        echo '<pre>';
        print_r($orderIds);
        echo '
';

1 Ответ

1 голос
/ 28 июля 2011

Ну, вы еще не закончили с первым запросом, когда вы соединяетесь со вторым запросом. Продолжите и закончите с первым запросом, затем начните второй. Попробуйте что-нибудь еще, как это ...

$conn = Mage::getSingleton('core/resource')->getConnection('core_write');
$result = $conn->query('select * from sales_flat_order WHERE customer_id='.$session->getCustomerId().' AND state="complete" AND is_virtual=1 AND juno_order_id!="null"');
$orderIds=array();
foreach ($result as $orderId)
{
  $orderIds[]=$orderId[entity_id];    
}
foreach ($orderIds as $orderId)
{
  $itemsonOrder=$conn->query('select * from sales_flat_order_items WHERE order_id='.$orderId);
}

Кроме того, вам, вероятно, следует убедиться, что вы используете параметры при выполнении запросов. Подобное объединение строк sql может быть опасным (иногда вы открыты для уязвимостей). Например,

$conn->query('select * from sales_flat_order_items WHERE order_id='.$orderId);

следует изменить на

$conn->query('select * from sales_flat_order_items WHERE order_id=?', array($orderId));

Кроме того, вам действительно нужно "выбрать *" ??? Я имею в виду, просто выберите нужные столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...