2010-11-08 24 views
2

J'ai une commande LOAD DATA qui fonctionne correctement dans le terminal MySQL. Cela fonctionne très bien dans un fichier PHP de test servi depuis mon serveur local. Cela fonctionne très bien dans phpMyAdmin sur le même serveur. Il se décompose inexplicablement lorsqu'il est exécuté à partir de Magento, également sur le même serveur.LOAD DATA LOCAL INFILE ne fonctionne que parfois

J'ai confirmé que toutes les méthodes utilisent les mêmes identifiants de connexion. Si je copie la commande échouée (y compris toutes les requêtes précédentes à partir de la connexion) à partir du journal de requête et que je la colle dans une autre méthode, elle fonctionne de nouveau mystérieusement. La requête elle-même ne peut pas être en faute.

Par conséquent, je déduis que le problème doit être celui des autorisations. Le privilège de fichier est défini et fonctionne pour d'autres implémentations sur le même compte. Magento utilise pdo_mysql comme connexion. Si je duplique cela dans un fichier de test cela fonctionne. Magento doit définir certains paramètres qui interfèrent.

L'erreur que j'obtiens est SQLSTATE[42000]: Syntax error or access violation: 1148 The used command is not allowed with this MySQL version. Je dois utiliser le mot clé modificateur "LOCAL" car je ne peux pas garantir que le serveur de base de données sera accessible.

La question précédente la plus proche ici sur SO concerns drupal, l'erreur est différente mais je me souviens drupal utilise également pdo_mysql pour se connecter, peut-être qu'il est lié. La seule autre mention de cette erreur sur Magento is this thread qui échoue également sur une commande LOAD DATA LOCAL INFILE.

+0

pouvez vous poster ce contenu spécifique échoue? –

+0

Activez la connexion SQL et voyez ce qui se passe. Vous devriez être capable de suivre les appels SQL et de déterminer si quelque chose d'étrange se passe. Vérifiez également les connexions peut-être que vous avez 2 connexions pour l'un 'localhost' et peut-être une pour '%' chacune d'elles aura des permissions différentes, l'infile load doit avoir les permissions correctes. – DeveloperChris

+0

@DeveloperChris. Bonne suggestion à la recherche de l'hôte '%' mais malheureusement n'existe pas. Il n'y a qu'un compte avec accès à cette base de données particulière, et racine bien sûr, mais je ne l'utilise pas. – clockworkgeek

Répondre

2

Par la suggestion de @DeveloperChris, vous pouvez activer la journalisation SQL dans Magento dans la classe Varien_Db_Adapter_Pdo_Mysql (dans le chemin lib\Varien). Remplacez les variables de classe $_debug et $_logAllQueries par true. Vous pouvez également modifier le chemin du fichier dans lequel les requêtes sont enregistrées $_debugFile. Ne pas oublier de l'éteindre avant la production!

HTH, JD

+0

Le journal SQL affiche la même chose que le journal de requête maître. Copier-coller les requêtes de l'un ou l'autre des journaux vers un terminal fonctionne. – clockworkgeek