【问题标题】:Checkout failure on last step最后一步结帐失败
【发布时间】:2014-04-05 00:01:44
【问题描述】:

我的网站即将上线,因为我必须将我的数据库更新为网站当前的销售订单和交易标准以及其他标准,因此它们正好符合要求。我将销售文件从实时数据库导入到即将上线的数据库中,该数据库在此之前一直运行良好。一旦更新了销售和订单文件,我的结帐过程在点击“下订单”的最后一步失败。它进入提交过程,然后只是弹出一条消息,指出“处理您的订购。请联系我们或稍后再试。”单击确定,您只需盯着等待的购物车。我环顾四周并尝试了一些东西,但无济于事。所以我来找你们都知道堆栈工作人员!

这是我现在得到的错误日志;

    exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number:     parameter was not defined' in /www/www/store/lib/Zend/Db/Statement/Pdo.php:228
    Stack trace:
    #0 /www/www/store/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement-    >execute(Array)
    #1 /www/www/store/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
    #2 /www/www/store/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
    #3 /www/www/store/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
    #4 /www/www/store/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT `sales_f...', Array)
    #5 /www/www/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(428): Zend_Db_Adapter_Pdo_Abstract->query('SELECT `sales_f...', Array)
    #6 /www/www/store/lib/Zend/Db/Adapter/Abstract.php(825): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array)
    #7 /www/www/store/app/code/local/Mage/Sales/Model/Resource/Quote.php(169): Zend_Db_Adapter_Abstract->fetchOne(Object(Varien_Db_Select), Array)
    #8 /www/www/store/app/code/core/Mage/Sales/Model/Quote.php(1637): Mage_Sales_Model_Resource_Quote->isOrderIncrementIdUsed('100014532')
    #9 /www/www/store/app/code/core/Mage/Sales/Model/Service/Quote.php(147): Mage_Sales_Model_Quote->reserveOrderId()
    #10 /www/www/store/app/code/core/Mage/Sales/Model/Service/Quote.php(249): Mage_Sales_Model_Service_Quote->submitOrder()
    #11 /www/www/store/app/code/core/Mage/Checkout/Model/Type/Onepage.php(785): Mage_Sales_Model_Service_Quote->submitAll()
    #12 /www/www/store/app/code/core/Mage/Checkout/controllers/OnepageController.php(579): Mage_Checkout_Model_Type_Onepage->saveOrder()
    #13 /www/www/store/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Checkout_OnepageController->saveOrderAction()
    #14 /www/www/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('saveOrder')
    #15 /www/www/store/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
    #16 /www/www/store/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
    #17 /www/www/store/app/Mage.php(684): Mage_Core_Model_App->run(Array)
    #18 /www/www/store/index.php(87): Mage::run('', 'store')
    #19 {main}

    Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[HY093]: Invalid         parameter number: parameter was not defined' in /www/www/store/lib/Zend/Db/Statement/Pdo.php:234
    Stack trace:
    #0 /www/www/store/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
    #1 /www/www/store/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
    #2 /www/www/store/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
    #3 /www/www/store/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT `sales_f...', Array)
    #4 /www/www/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(428): Zend_Db_Adapter_Pdo_Abstract->query('SELECT `sales_f...', Array)
    #5 /www/www/store/lib/Zend/Db/Adapter/Abstract.php(825): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array)
    #6 /www/www/store/app/code/local/Mage/Sales/Model/Resource/Quote.php(169): Zend_Db_Adapter_Abstract->fetchOne(Object(Varien_Db_Select), Array)
    #7 /www/www/store/app/code/core/Mage/Sales/Model/Quote.php(1637): Mage_Sales_Model_Resource_Quote->isOrderIncrementIdUsed('100014532')
    #8 /www/www/store/app/code/core/Mage/Sales/Model/Service/Quote.php(147): Mage_Sales_Model_Quote->reserveOrderId()
    #9 /www/www/store/app/code/core/Mage/Sales/Model/Service/Quote.php(249): Mage_Sales_Model_Service_Quote->submitOrder()
    #10 /www/www/store/app/code/core/Mage/Checkout/Model/Type/Onepage.php(785): Mage_Sales_Model_Service_Quote->submitAll()
    #11 /www/www/store/app/code/core/Mage/Checkout/controllers/OnepageController.php(579): Mage_Checkout_Model_Type_Onepage->saveOrder()
    #12 /www/www/store/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Checkout_OnepageController->saveOrderAction()
    #13 /www/www/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('saveOrder')
    #14 /www/www/store/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
    #15 /www/www/store/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
    #16 /www/www/store/app/Mage.php(684): Mage_Core_Model_App->run(Array)
    #17 /www/www/store/index.php(87): Mage::run('', 'store')
    #18 {main}

我可以看到它们都在处理相同的无效参数,但我假设如果我只修复一个参数(这可能只是我假设的一个个人用户帐户的参数)它仍然会出错其他,不能有效解决问题。所以我不得不问,这是否让任何人知道我到底做了什么来炸毁我的商店?!谢谢你们的时间,真的!

【问题讨论】:

  • 某事正在尝试使用 PDO 在准备好的查询中设置参数。但是在准备查询时没有定义参数。但如果没有任何进一步的信息,这将是一场猜谜游戏。您说您“环顾四周并尝试了一些事情”。你发现了什么,你尝试了什么,结果如何?
  • magentocommerce.com/boards/viewthread/246805 这是我查看过的类似线程,并尝试了可能的修复,例如移动报价文件并更改它,但仍然继续相同的问题,甚至构建了另一个问题,因此被丢弃.. 我尝试多次重做数据库导入,确保外键被禁用,因为 magento 一直在这些钩子上播放,但仍然没有改变。
  • 该线程讨论了一个完全不同的问题。您需要搜索您得到的错误:“无效的参数号:未定义参数”。还要检查您是否正在运行此 Magento 软件的最新版本。否则这很可能是一个错误,您可能想加入他们自己的论坛并报告它。因为那里出了问题;他们的代码准备了一个 SQL 查询,然后尝试在其中设置一个不存在的参数。对我来说听起来像是一个错误。
  • 糟糕,完全链接错误的页面! magentocommerce.com/boards/viewthread/264446/P0 那是参考这个问题的页面。不过,他们确实也谈到了这可能是一个错误。
  • 该线程还讨论了一个不同的错误。不要看大堆栈跟踪。它们看起来总是一样的。 (嗯,有点。)只有第一行对你很重要,尤其是错误代码:HY093。这表明了核心问题。我真的会在他们的论坛中打开一个主题,并包含与您在此处发布的相同的完整错误消息和堆栈跟踪。

标签: php magento pdo checkout


【解决方案1】:

首先,查看您的具体错误

带有消息 SQLSTATE[HY093] 的异常“PDOException”:参数号无效:未定义参数

这是 PHP 的数据库层说“有人用错了我”。具体来说,看起来有人使用了参数化查询,其中包含空白和/或无效参数。

其次,查看您的堆栈跟踪,我注意到了这一点。

/www/www/store/app/code/local/Mage/Sales/Model/Resource/Quote.php(169): Zend_Db_Adapter_Abstract->fetchOne(Object(Varien_Db_Select), Array)

具体来说,您或某人似乎为报价资源模型创建了代码池覆盖。在其他一切都相同的情况下,我想说您从核心文件中对该文件所做的更改很可能是导致您的问题的原因。可能在这种方法中(大约第 169 行)

#File: app/code/core/Mage/Sales/Model/Resource/Quote.php
public function isOrderIncrementIdUsed($orderIncrementId)
{
    $adapter   = $this->_getReadAdapter();
    $bind      = array(':increment_id' => (int)$orderIncrementId);
    $select    = $adapter->select();
    $select->from($this->getTable('sales/order'), 'entity_id')
        ->where('increment_id = :increment_id');
    $entity_id = $adapter->fetchOne($select, $bind);
    if ($entity_id > 0) {
        return true;
    }

    return false;
}

我的猜测是你要么使用了 $bind 数组

$entity_id = $adapter->fetchOne($select, $bind);

或在 SQL 中包含未考虑的其他查询参数。

->where('increment_id = :increment_id');

【讨论】:

  • 直到我解决这个错误之前,我从来没有碰过那个quote.php(至少据我所知,也许有一些扩展可能点击了它?)但也就是说,当我进行导入时,我只是导入了所有用于更新后端订单和运输的 sales_* 文件(这是成功的),但显然是通过扳手进入结帐,您是否认为将目录与 sales_* 甚至客户一起导入会产生任何改变的效果?
  • 1.有人编辑了它,否则它不会在本地。 2.选择性地导入magento数据库表是很疯狂的,只会导致撕裂。 3. 当 PHP 告诉你问题时,为什么要猜测错误——你需要做的就是弄清楚为什么 $bind/参数不好,你就会得到答案。
  • 嗯,谢谢你的洞察力 :) 明天我肯定会更深入地研究这个,我对这一切仍然很新鲜。我会研究分阶段的版本,看看如果这些文件有任何变化,即quote.php与我的本地版本相比
  • 特别是第 2 点... Magento 的数据库交互比大多数关系系统更复杂,而且很容易出错。
  • 只是跟进;我能够让我的购物车再次工作。我相信主要问题是能够多次购物,因为第一个会给出一个特定的 id,没关系,第二次尝试购买会尝试使用相同的 id 并发生冲突。如您所知,我是新人,是一种学习试炼。我删除了整个本地 quote.php 区域,因为我在故障排除时只包含了那个之后。然后它只是给了我错误; 'SQLSTATE [23000]:完整性约束违规:1062 键 'UNQ_SALES_FLAT_ORDER_INCREMENT_ID' 的重复条目 '100014536''
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多