2010-11-08 52 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