【问题标题】:How to fix magento reindexing with PDOException error?如何使用 PDOException 错误修复 magento 重新索引?
【发布时间】:2014-01-06 06:56:23
【问题描述】:

重新索引数据时出现错误。我已经为这个问题工作了大约 3 天,仍然找不到解决方案。这是我收到的日志错误:

默认值 (MANAdev) 索引进程未知错误:异常 带有消息“SQLSTATE [23000]”的“PDOException”:完整性约束 违规:1452 无法添加或更新子行:外键 约束失败(glasseso_magento.m_filter2_value, CONSTRAINT FK_m_filter2_value_mana_db?edit_session 外键 (edit_session_id) 参考文献m_edit_session (id) 删除 CASCADE ON UPDATE CASCAD)' 在 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Statement/Pdo.php:228

堆栈跟踪:

#0 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /Applications/MAMP/htdocs/magestore/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#4 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `m_...', Array)
#5 /Applications/MAMP/htdocs/magestore/lib/Varien/Db/Adapter/Pdo/Mysql.php(419): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `m_...', Array)
#6 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Adapter/Abstract.php(574): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `m_...', Array)
#7 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Core/Model/Resource/Db/Abstract.php(453): Zend_Db_Adapter_Abstract->insert('m_filter2_value', Array)
#8 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Core/Model/Abstract.php(318): Mage_Core_Model_Resource_Db_Abstract->save(Object(Mana_Filters_Model_Filter2_Value))
#9 /Applications/MAMP/htdocs/magestore/app/code/local/Mana/Db/Helper/Data.php(217): Mage_Core_Model_Abstract->save()
#10 /Applications/MAMP/htdocs/magestore/app/code/local/Mana/Db/Model/Indexer.php(36): Mana_Db_Helper_Data->replicate()
#11 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Index/Model/Process.php(209): Mana_Db_Model_Indexer->reindexAll()
#12 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Index/Model/Process.php(255): Mage_Index_Model_Process->reindexAll()
#13 /Applications/MAMP/htdocs/magestore/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#14 /Applications/MAMP/htdocs/magestore/shell/indexer.php(198): Mage_Shell_Compiler->run()
#15 {main}

下一个异常

'Zend_Db_Statement_Exception' 带有消息'SQLSTATE[23000]:完整性 违反约束:1452 无法添加或更新子行:外国 键约束失败 (glasseso_magento.m_filter2_value, CONSTRAINT FK_m_filter2_value_mana_db?edit_session 外键 (edit_session_id) 参考文献m_edit_session (id) 删除 CASCADE ON UPDATE CASCAD)' 在 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Statement/Pdo.php:234

堆栈跟踪:

#0 /Applications/MAMP/htdocs/magestore/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#1 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#2 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#3 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `m_...', Array)
#4 /Applications/MAMP/htdocs/magestore/lib/Varien/Db/Adapter/Pdo/Mysql.php(419): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `m_...', Array)
#5 /Applications/MAMP/htdocs/magestore/lib/Zend/Db/Adapter/Abstract.php(574): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `m_...', Array)
#6 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Core/Model/Resource/Db/Abstract.php(453): Zend_Db_Adapter_Abstract->insert('m_filter2_value', Array)
#7 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Core/Model/Abstract.php(318): Mage_Core_Model_Resource_Db_Abstract->save(Object(Mana_Filters_Model_Filter2_Value))
#8 /Applications/MAMP/htdocs/magestore/app/code/local/Mana/Db/Helper/Data.php(217): Mage_Core_Model_Abstract->save()
#9 /Applications/MAMP/htdocs/magestore/app/code/local/Mana/Db/Model/Indexer.php(36): Mana_Db_Helper_Data->replicate()
#10 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Index/Model/Process.php(209): Mana_Db_Model_Indexer->reindexAll()
#11 /Applications/MAMP/htdocs/magestore/app/code/core/Mage/Index/Model/Process.php(255): Mage_Index_Model_Process->reindexAll()
#12 /Applications/MAMP/htdocs/magestore/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#13 /Applications/MAMP/htdocs/magestore/shell/indexer.php(198): Mage_Shell_Compiler->run()
#14 {main}

希望有人能在这个问题上帮助我。

【问题讨论】:

    标签: php mysql magento zend-framework


    【解决方案1】:

    一个快速的解决方案是捕获异常并记录它,这样索引器就可以完成它的工作。

    也许 try{} catch{} 块适合这里:

    Applications/MAMP/htdocs/magestore/app/code/local/Mana/Db/Helper/Data.php(217):Mage_Core_Model_Abstract->save()

    异常的原因可能在 Mana-Module 的不一致实现中找到。

    【讨论】:

    • “不一致的实现”是什么意思?
    【解决方案2】:

    一个好的解决方案可能是禁用“外键检查”。在文件 /app/code/local/Mana/Db/Helper/Data.php (217) ...

    改变这个:

    $object->save();
    

    为此:

    $resource = Mage::getSingleton('core/resource');
    $writeConnection = $resource->getConnection('core_write');
    $writeConnection->query("SET FOREIGN_KEY_CHECKS = 0;");
    $object->save();
    $writeConnection->query("SET FOREIGN_KEY_CHECKS = 1;");
    

    祝你好运!

    【讨论】:

      【解决方案3】:

      我看了一下m_edit_session的内容,只有一行ID为1,created_at下面有时间戳。我将唯一一行的 ID 更改为 0(而不是 1),这个错误就消失了。

      【讨论】:

      • 这为我解决了这个问题!我猜这是因为我复制了数据库,因为还有其他部分将 ID 从 0 更改为 1,例如用户管理。复制数据库并不能保持 ID 完整,这很烦人。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      相关资源
      最近更新 更多