【发布时间】:2011-05-10 13:07:10
【问题描述】:
我们有一个模块可以将产品导入 magento。该模块由 Magento 程序员编写。它使用 Magento API 并用 PHP 编写。它读取一个类似 CSV 的文件(实际使用的分隔符是 '#'),将一行转换为产品,然后将产品写回 Magento。到目前为止,一切顺利。
我已经复制并更改了几次模块。最后一个变化是更新产品,而不是导入整个产品。该模块适用于其中大约 950 种产品,然后抛出异常:
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 本身修复它。另一种方法可能是清除相应的索引表并从头开始重建索引。我不确定在我不完全理解的数据库架构中进行挖掘是个好主意。
谁能帮我找出问题所在?
【问题讨论】:
-
你能帮我吗?如何记录完整查询?通过 MySQL,还是有办法使用 Magento 本身?