首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreach循环两次返回查询

Foreach循环两次返回查询
EN

Stack Overflow用户
提问于 2013-06-11 23:48:11
回答 2查看 297关注 0票数 0

如果有人能帮我解决这个问题,我会非常感激。我在Magento,顺便说一下,我有这个方法,它基本上是获取两组数据,并用它们创建一条sql语句。

代码语言:javascript
复制
private function _getInsertSql($data, $itemData)
{

    $sql = 'insert into orders_headers (';
    $keys = array_keys($data);
    $sql .= implode(', ', $keys);
    $sql .= ') values (';
    foreach($data as $value) {
        $type = $value['type'];
        $vv = $value['value']; 
        if ($type == 'number') {
            $sql .= $vv;
        } else {
            $sql .= $this->_db->quote($vv);
        }
        $sql .= ',';
    }
    $sql = substr($sql, 0, strlen($sql)-1);
    $sql .= ');';

    $first = 0;
    $sql .= 'insert into orders_lines (';
    foreach($itemData as $data) {
        if ($first <= 0) {
            $keys = array_keys($data);
            $sql .= implode(', ', $keys);
            $sql .= ') values (';
        } else {
            $sql .= '('; 
        }
        foreach($data as $value) {
            $type = $value['type'];
            $vv = $value['value']; 
            if ($type == 'number') {
                $sql .= $vv;
            } else {
                $sql .= $this->_db->quote($vv);
            }
            $sql .= ',';
        }
        $sql = substr($sql, 0, strlen($sql)-1);
        $sql .= '),';
        $first++;
    }

    $sql = substr($sql, 0, strlen($sql)-1);

    $sql .= ';';
    Mage::log("START" .$sql . "END", NULL, 'sql.log');
    return $sql;
}

正如您在最后看到的,我注销了.sql,奇怪的是,它产生了两次相同的查询。因此,在DB中插入同一行两次。

我无论如何也看不出它在哪里循环到顶部并再次创建查询。

输出sql为:

2013-06-11T15:37:45+00:00调试(7):STARTinsert进入orders_headers (orderID,datetime,ip,customerID,forename,surname,address1,address2,城镇,县,国家,邮政编码,电话,传真,电子邮件,公司,deliveryName,deliveryAddress1,deliveryAddress2,deliveryTown,deliveryCounty,deliveryCountry,deliveryPostcode,deliveryTelephone,goodsTotal,shippingTotal,taxTotal,discountTotal,order_state,status,,)e_purchaseordref,e_statuschk,e_accepted)值('100004952','20130611153744','127.0.0.1',0,'TES','S','','GB','S','SA','','S@gmila.com','','TES S','GB','S',‘'SA',28.88,7.25,4.81,0,'new','pending_awaiting_payment','','20130611153745','P','udropship_default',5,'Cheque','',0,'','Cheque','udropship_default','master/site/',0,'','100004952','master/site/','ZZZ888','','2106','');插入xm1_orders_lines (orderID,productID,code,名称,数量,重量,价格,nameNative,税额,ooprice,ooprice,supplierID,supplierCost,supplierCostCurrencyID,order_state,order_status,order_save_time)值(‘100004952’,'UGWA050',‘不锈钢

酒冰桶,最大9磅,1,10.0900,16.82,不锈钢

酒冰桶,magnum 9 pt',3.36,0,0,5,10.0900,1,‘新建’,‘等待付款’,'20130611153745');END 2013-06-11T15:37:45+00:00调试(7):STARTinsert进入orders_headers (orderID,datetime,ip,customerID,forename,surname,address1,address2,镇,县,国家,邮政编码,电话,传真,电子邮件,公司,deliveryName,deliveryAddress1,deliveryAddress2,deliveryTown,deliveryCounty,deliveryCountry,deliveryPostcode,deliveryTelephone,goodsTotal,shippingTotal,taxTotal,discountTotal,order_state,status,,)e_purchaseordref,e_statuschk,e_accepted)值('100004952','20130611153744','127.0.0.1',0,'TES','S','','GB','S','SA','','S@gmila.com','','TES S','GB','S',‘'SA',28.88,7.25,4.81,0,'new','pending_awaiting_payment','','20130611153745','P','udropship_default',5,'Cheque','',0,'','Cheque','udropship_default','master/site/',0,'','100004952','/master/site/','ZZZ888','','2106','');插入xm1_orders_lines (orderID,productID,code,名称,数量,重量,价格,nameNative,税额,ooprice,ooprice,supplierID,supplierCost,supplierCostCurrencyID,order_state,order_status,order_save_time)值(‘100004952’,'UGWA050',‘不锈钢

酒冰桶,最大9磅,1,10.0900,16.82,不锈钢

酒冰桶,magnum 9 pt',3.36,0,0,5,10.0900,1,‘新建’,‘等待付款’,‘20130611153745’);结束

有人能提供帮助吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-06-12 00:08:59

我认为foreach没有给你两次查询,但是你的方法被调用了两次。代码中的log方法在foreach循环之外,日志文件本身包含两个条目(包装在START和END中)。最好找出调用该方法的位置,并在那里进行调试。

票数 2
EN

Stack Overflow用户

发布于 2013-06-12 16:16:30

在深入研究之后,我发现afterordersaved之后的事件被调用了两次。

我相信它是通过customer_save_observer_executed来解决这个问题的,我刚刚做了以下几件事:

代码语言:javascript
复制
if(Mage::register('customer_save_observer_executed')) {
return;
}
Mage::log('afterOrderSavedObserver call', NULL, 'method_calls.log');                
$model = Mage::getModel('ordersintegration/export');
$model->afterOrderSavedXm1($order);
Mage::register('customer_save_observer_executed', true);

这现在起作用了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17048412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档