【问题标题】:magento make multiple database connections without losing array valuesmagento 建立多个数据库连接而不会丢失数组值
【发布时间】:2011-07-25 19:16:29
【问题描述】:

我正在尝试连接到两个不同的数据库,所以我的脚本应该如下工作

  1. 查找当前已登录客户的所有订单,其中订单状态已完成,它是一个虚拟产品,并且有一个 juno 订单 ID(此查询工作正常)

  2. 收集所有已找到的订单 ID 并将它们存储在一个数组中(这很好)

  3. 现在连接到 sales_order_items 并为订单 ID 中的每个项目检查数据库是否有 url 下载链接,

  4. 如果没有,我将连接到 api --

问题是当我想进行第二次连接时,我似乎丢失了存储在 $orderIds 数组中的所有值。

我一直在寻找解决方案,但我对 zend 框架还很陌生

任何帮助将不胜感激

我的脚本如下

        $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 '</pre>';

【问题讨论】:

  • 您的意思是您正在尝试实例化连接并且它正在获得默认的空值...数据库正在用于 app/etc/local.xml 中定义...我认为这是基本的 OOP 问题。

标签: php mysql arrays zend-framework magento


【解决方案1】:

当您连接第二个查询时,您还没有完成第一个查询。继续完成第一个查询,然后开始第二个查询。尝试更多类似的东西...

$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));

另外,你真的需要“选择*”吗???我的意思是,只需选择您需要的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 2011-01-19
    • 2013-04-27
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多