2010-11-08 92 views
2

我有一个LOAD DATA命令,可以在MySQL终端中正常工作。它在我的本地服务器提供的测试PHP文件中工作正常。它可以在同一台服务器上的phpMyAdmin中正常工作。当从Magento运行时,它也会在同一台服务器上崩溃,这是莫名其妙的。LOAD DATA LOCAL INFILE仅适用于

我已确认所有方法都使用相同的登录凭据。如果我从查询日志中复制失败的命令(包括从前连接的所有先前的查询)并粘贴到任何其他方法中,它会再次神秘地工作。查询本身不会出错。

因此我推断这个问题必须是权限之一。文件权限已设置并适用于同一帐户上的其他实施。 Magento使用pdo_mysql作为连接。如果我在测试文件中复制它,它就可以工作。 Magento必须设置一些干扰参数。

我得到的错误是SQLSTATE[42000]: Syntax error or access violation: 1148 The used command is not allowed with this MySQL version。我必须使用“LOCAL”修饰符关键字,因为我无法保证数据库服务器可以访问。

上面关于SO concerns drupal最近的问题,错误是不同的,但我记得drupal也使用pdo_mysql来连接,也许它是相关的。在Magento is this thread上唯一另外提到的这个错误也会在LOAD DATA LOCAL INFILE命令中失败。

+0

你可以发布具体内容失败吗? – 2010-11-08 06:39:56

+0

打开SQL日志记录,看看会发生什么。你应该能够遵循sql调用并确定是否有奇怪的事情发生。还要检查登录名,也许你有两个登录名'localhost',也许一个'%'每个都有不同的权限,load infile必须设置正确的权限。 – DeveloperChris 2010-11-08 06:43:24

+0

@DeveloperChris。好主意寻找主机'%',但遗憾的是不存在。只有一个帐户可以访问这个特定的数据库,当然,但我不使用它。 – clockworkgeek 2010-11-08 14:54:32

回答

2

根据@DeveloperChris的建议,您可以在Varien_Db_Adapter_Pdo_Mysql类(在lib\Varien路径中)启用Magento中的SQL日志记录。将$_debug$_logAllQueries类变量更改为true。您还可以更改$_debugFile中查询记录的文件路径。

不要忘记在生产之前关闭它!

HTH, JD

+0

SQL日志显示与主查询日志相同。将日志中的查询复制到终端工作。 – clockworkgeek 2010-11-08 16:41:07