Php Magento:自写产品导入/更新后重建索引引发异常
我们有一个模块将产品导入magento。该模块由Magento程序员编写。它使用MagentoAPI并用PHP编写。它读取一个类似CSV的文件(实际使用的分隔符是“#”),将一行翻译成产品,然后将产品写回Magento。到目前为止,一切顺利 我已经复制和更改了几次模块。最后一个变化是更新产品,而不是导入整个产品。该模块处理了其中大约950个产品,然后引发了一个异常:Php Magento:自写产品导入/更新后重建索引引发异常,php,mysql,magento,Php,Mysql,Magento,我们有一个模块将产品导入magento。该模块由Magento程序员编写。它使用MagentoAPI并用PHP编写。它读取一个类似CSV的文件(实际使用的分隔符是“#”),将一行翻译成产品,然后将产品写回Magento。到目前为止,一切顺利 我已经复制和更改了几次模块。最后一个变化是更新产品,而不是导入整个产品。该模块处理了其中大约950个产品,然后引发了一个异常: magento:/srv/www/vhosts/www.mysite.com/shell # php import_colors.
magento:/srv/www/vhosts/www.mysite.com/shell # php import_colors.php ../var/import/colors.csv.out.csv
PHP Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '12804-176-1-563' for key 'PRIMARY'' in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
#3 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
#4 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(1537): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...', Array)
#5 /srv/www/vhosts/www.mysite.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Eav in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php on line 234
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '12804-176-1-563' for key 'PRIMARY'' in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
#3 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
#4 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(1537): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...', Array)
#5 /srv/www/vhosts/www.mysite.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Eav in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php on line 234
我一点也没想到。客户很高兴自己更换了最后50个左右的产品,错误信息被忘记了
然而,今天客户称他的产品属性索引不会建立,后台的索引仍然是橙色的“处理”。因此,我调查发现,可以使用shell/indexer.php构建索引。所以我试过了,瞧,我几乎忘记了同样的错误信息
我已经转储了数据库,并试图找出哪个表实际上包含了错误消息(12804-176-1-563)中列出的数据,但我没有运气。似乎这4个日期在这个顺序中找不到
现在,有两种选择可以继续。一种方法是找出哪个表实际包含问题,这样就可以使用Magento本身修复问题。另一种方法可能是清除相应的索引表并从头开始重建索引。我不确定在我不完全理解的数据库模式中四处挖掘是一个好主意
有人能帮我找出问题吗?请检查这不是简单的问题,例如数据库中的一些重复产品被“中止”,从而使产品条目没有SKU值。我对自编PHP导入脚本也有同样的问题。我仍然不知道如何解决这个问题,但我发现在12804-176-1-563中,12804指的是数据库中产品的id。因此,如果您删除/重新创建或禁用该产品,则索引器将正常工作。
如果您有任何关于为什么存在某些违反完整性约束的提示,请与我们分享!:-) 你能帮我吗?如何记录完整查询?通过MySQL,还是有办法使用Magento本身?这是一种解决方案。我不知道为什么会有重复的条目。我已经手动删除了这些条目,索引再次正确构建。