Probleme lien relatif/lien absolu pour requete sql

Résolu
Signaler
Messages postés
13
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2011
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Bonjour a tous,

je rencontre un problème lors de l’exécution d'une requête sql utilisant un lien vers un fichier.
Je m'explique : je souhaite mettre à jour une bdd grâce a un fichier excel importé depuis une interface administrateur. Pour cela l'utilisateur upload son fichier texte (excel enregistré en txt separateur tab) qui est enregistré a un certain endroit. Le script va alors vider la table puis mettre à jour la bdd grâce au fichier texte. Le problème est que en local le script marche mais en ligne le lien pose problème : la table se vide mais la maj ne s'effectue pas... Je cherche désespérément une explication et surtout une solution. Voici les deux lignes en question :
$reponse = $bdd->query('TRUNCATE table infos'); //ligne qui marche
$reponse = $bdd->query('LOAD DATA INFILE "../maj_bdd.txt" INTO TABLE infos'); //marche pas

si quelqu'un a une solution je suis preneur!

7 réponses

Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
et effectivement il n'y a pas d'erreur et comme ca marche en local je trouve ca vraiment bizarre..

Pas moi

Ca :
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;

Sauf à faire un truc pas clean (du style un global dans la fonction qui suit), ça ne sert à rien ... puisque tu ne l'utilises pas.
L'objet PDO créer reste donc avec ses options par défaut, donc pas d'erreur affichée.

Ca marche en local, OK, mais entre le local et le distant il y a sans doute un monde !!
OS ?
versions (apache, mysql, PHP) ?
serveur web et SQL sur la même machine ?
droits ?
... la liste pourrait être très longue.
Ce n'est pas parce que ça fonctionne en local que ça sera le cas ailleurs, surtout si tu es en mutualisé.

Et oui le fichier est bien sur le serveur. Le chemin est précisé dans la requête donc ca devrait marcher.

OK, mais sur quel serveur ?
Je serai surpris que le serveur mysql soit sur la même machine que le serveur web.
Si tu es en mutualisé, je serai surpris que tu ai accès à l'arborescence du serveur mysql.

En mutualisé je doute fort que cette commande passe.
Menfin, essais de voir tout de même la réponse que te fait le serveur en affichant l'exception (cf PDO::setAttribute)

Cordialement,

Kohntark -
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Quelle erreur est reportée ?
Quel est ce "certain endroit" ?

Par ailleurs ce genre de commande peut être bloqué par ton hébergeur (de mémoire il faut le droit "FILE" ou un truc du genre)


Cordialement,


Kohntark -
Messages postés
13
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2011

Il n'y a pas vraiment d'erreur, simplement la bdd ne se remplit pas (alors que cela fonctionne en local).

Le fichier texte copié se trouve dans un dossier contenant les pages du site..

Je vais vérifier si la commande n'est pas bloqué. Merci pour ta réponse.

Cordialement,

antoine
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Ca m'étonne qu'il n'y ait pas d'erreur de retournée.
Qu'utilises tu comme méthode pour accéder à ta DB ? (PDO ?, ..)
L'affichage des erreurs est il activé ?

Le fichier texte copié se trouve dans un dossier contenant les pages du site..

Ca ne m'en dit pas beaucoup plus.
Ce fichier se trouve t il sur le serveur de base de données ?
Si oui dans quel répertoire ?
Si non, ... le serveur mysql n'est pas prêt de le trouver

Tu peux potentiellement essayer avec mysqlimport ou avec l'option "LOCAL" de LOAD DATA ... mais je ne suis pas sur que ça soit gagné d'avance.

Reste la possibilité de faire des requêtes INSERT.


Cordialement,

Kohntark -
Messages postés
13
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2011

voila le code complet :
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;

$bdd = connection_bdd();

// ajout d'element grace au fichier texte
$reponse = $bdd->query('TRUNCATE table infos');
$reponse = $bdd->query('LOAD DATA INFILE "../maj_bdd.txt" INTO TABLE infos');


/* $reponse->closeCursor(); // Termine le traitement de la requête */

}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

et effectivement il n'y a pas d'erreur et comme ca marche en local je trouve ca vraiment bizarre..

Et oui le fichier est bien sur le serveur. Le chemin est précisé dans la requête donc ca devrait marcher.


Cordialement
Messages postés
13
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2011

Merci pour ton aide je vais creuser tout ça.

Cordialement,

antoine
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Dans la config par défaut, les erreurs/warnings ne sont jamais affichés. Utilise error_reporting(E_ALL); pour voir ce qui se passe.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question