Probleme lien relatif/lien absolu pour requete sql

Résolu
antoinesoler Messages postés 13 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 24 décembre 2011 - 18 août 2011 à 18:45
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 18 août 2011 à 22:10
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

kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
18 août 2011 à 20:21
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 -
3
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
18 août 2011 à 19:09
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 -
0
antoinesoler Messages postés 13 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 24 décembre 2011
18 août 2011 à 19:31
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
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
18 août 2011 à 19:43
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 -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
antoinesoler Messages postés 13 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 24 décembre 2011
18 août 2011 à 20:01
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
0
antoinesoler Messages postés 13 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 24 décembre 2011
18 août 2011 à 21:17
Merci pour ton aide je vais creuser tout ça.

Cordialement,

antoine
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
18 août 2011 à 22:10
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
0
Rejoignez-nous