Problème load data infile

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Minie
    a crée un sujet [RÉGLÉ] Problème load data infile

    Problème load data infile

    Bonjour,

    j'avais créé un script il y a un bon moment maintenant, qui fonctionnait très bien, tous les jours par tache cron, puis du jour au lendemain, une erreur est apparue.

    L'erreur est : Error: Call to a member function get() on null:
    La partie du code concernée :
    Code PHP:
    $db JFactory::getDBO();
    $query 'LOAD DATA LOCAL INFILE "components/com_gixia/upload/pneus/'.$fichier.'"
                    REPLACE
                    INTO TABLE #__gixia_upload_pneus
                    FIELDS
                      TERMINATED BY ";"
                      ENCLOSED BY ""
                      ESCAPED BY "\"
                    LINES
                      STARTING BY ""
                      TERMINATED BY "\\n"
                      IGNORE 1 LINES (code,itemcode,description,type,marque_code,marque,groupe,groupe_desc,e_mark,european,largeur,ratio,diametre,charge_vitesse,prix_fournisseur,gross,stock,eancode,ip_code,photo,consomation,adherence,bruit_db,bruit_lvl,poids)'
    ;

                      echo 
    $query;

                
    $db->setQuery($query);
                
    $db->execute(); 
    Si je remplace la requête load data par une requête basique de type select, aucun plantage, mais il ne veut plus de mon load data ...

    Si quelqu'un a une idée ca serait top, merci beaucoup d 'avance !
    Dernière édition par Minie à 01/07/2019, 10h47

  • Minie
    a répondu
    Bon, j'ai enfin trouvé la solution à mon problème, je la pose ici au cas ou certains auraient le même souci.
    Je pense que c'est à cause de la nouvelle version php car tout fonctionnait très bien sans mon fix avant.

    Deux choses, tout d'abord j'ai du rajouter un paramètre à la connexion bdd car visiblement php n'autorise plus le local d'office même si il est activé sur le serveur, ce qui explique pourquoi ma requete fonctionnait dans la console SQL et non en PHP, j'ai donc rajouté "array(PDO::MYSQL_ATTR_LOCAL_INFILE => true)" en paramètre

    Code PHP:
    $bdd = new PDO('mysql:host=localhost;dbname=***bddname***;charset=utf8''***user***''***pass***', array(PDO::MYSQL_ATTR_LOCAL_INFILE => true)); 
    Deuxièmement, toute une partie de la requête est devenue obsolète, j'ai supprimé quelques lignes, et ca fonctionne nickel, ca devient donc :

    Code PHP:
    'LOAD DATA LOCAL INFILE "'.$lien.'"
        REPLACE INTO TABLE sv1r8_gixia_upload_jantes
        FIELDS
            TERMINATED BY ";"
        IGNORE 1 LINES (mes_champs)' 
    Tout ca a été possible uniquement car mon rapport d'erreur était assez nul, j'ai changé mon code de rapport d'erreur et j'ai enfin eu toutes les erreurs, voici donc le rapport d'erreur qui aide ...

    Code PHP:
    $bdd->query($query) or die(print_r($bdd->errorInfo())); 
    Voilà, tout est là pour le prochain qui tombera dedans !

    Laisser un commentaire:


  • Minie
    a répondu
    Merci, je vais tester

    Laisser un commentaire:


  • lefabdu51
    a répondu
    https://www.linuxtricks.fr/wiki/mysq...-de-passe-root

    https://makandracards.com/makandra/1...-root-password
    Dernière édition par lefabdu51 à 07/06/2019, 08h38

    Laisser un commentaire:


  • Minie
    a répondu
    Envoyé par lefabdu51 Voir le message
    il faut redemarrer le service avec la bonne syntaxe et les options qui vont bien.
    oui, j'ai un accès SSH root, par contre je ne connais pas la manip pour redémarrer avec la bonne syntaxe et les options qui vont bien

    Laisser un commentaire:


  • lefabdu51
    a répondu
    tu as un accès ssh sur ce serveur ?
    il te faut les droits admin sur le serveur.
    il faut redemarrer le service avec la bonne syntaxe et les options qui vont bien.
    et tu peut te connecter directement sans avoir à entrer ton mdp root mysql, ce qui te permettras de le modifier via une requete sql.
    C est ce que je fait quand cela m arrives.
    Le temps d'indisponibilité est inversement proportionel au temps que tu passeras a ecrire la procédure.
    Normalement, c est 5 minutes maximum. Apres le quand c est a toi de voir selon les pics d activités du serveur concerné.
    Dernière édition par lefabdu51 à 04/06/2019, 21h20

    Laisser un commentaire:


  • Minie
    a répondu
    Linux et ses packets ont été installés par l'hébergeur
    Je n'ai donc pas choisi de mot de passe root MySQL.

    Lorsque je me log à PHP MyAdmin, c'est toujours sur une base de site en particulier via plesk, donc en tant qu'utilisateur de la base que j'ai créé simultanément.

    Laisser un commentaire:


  • roland_d_alsace
    a répondu
    Envoyé par Minie Voir le message
    ...

    Et oui, il me demande le mot de passe associé à l'utilisateur root MySQL, ....

    J'ai un dédié chez 1&1, je les ai appelé, et il ne l'ont pas, ...
    L'inverse serait anormal !
    Si c'est un serveur dédié, c'est bien toi qui a installé la distribution Linux et ses packets ?

    Et lors de l'install de mysql (ou de mariadb selon ton choix à l'époque), c'est bien toi qui a choisi le MdP de l'administrateur mysql.

    Et avec phpmyadmin tu te loggues avec quel compte et quel mot de passe ?

    Laisser un commentaire:


  • Minie
    a répondu
    Oui j'utilise bien Win SCP en tant que client SSH, très peu pour les commandes. Ca peut m'arriver pour passer des droits sur tout un joomla par exemple.
    Pour les commandes j'ai commencé avec Putty du coup.

    Et oui, il me demande le mot de passe associé à l'utilisateur root MySQL, et non SSH. Forcément j'ai le passe SSH mais je n'ai pas celui de root SQL. J'ai un dédié chez 1&1, je les ai appelé, et il ne l'ont pas, il faudrait que je coupe momentanément le service SQL pour faire la manip de réinitialisation de pass Root MySQL, et je ne peux pas me le permettre j'ai plus de 50 sites de clients sur ce serveur et je ne sais pas combien de temps je vais mettre pour cette manip.

    Laisser un commentaire:


  • lefabdu51
    a répondu
    winscp est une console ftp, pas une invite de commandes.
    Si tu veux un client simple a configurer utilise bitvise.
    https://www.bitvise.com/ssh-client-download
    Code:
    mysql -u root -p
    Quand tu entres ceci dans une console ssh, il te demandes le mot de passe associé à l'utilisateur.

    Laisser un commentaire:


  • Minie
    a répondu
    Toujours bloquée, je désespère

    Laisser un commentaire:


  • Minie
    a répondu
    Bon, j'ai installé putty, j'ai ouvert ma session ssh après avoir enfin capté qu'il fallait taper le pass à l'aveugle
    Mon pass Root ssh ne fonctionne pas en Root MySQL Tu suggérais de lancer la requête SQL dans putty ? Ou d'exécuter le fichier en ligne de commande ?
    Dernière édition par Minie à 23/05/2019, 12h37

    Laisser un commentaire:


  • roland_d_alsace
    a répondu
    En fait Win SCP installe putty.
    Pour preuve tu as bien le bouton "ouvrir dans putty", et là tu est en mode console sur ton serveur où tu peux lancer n'importe quelle commande linux dont mysql.

    et mysql -u root -p motdepasse doit obligatoirement fonctionner sinon c'est qu'il y a un problème sur ton serveur.

    Laisser un commentaire:


  • Minie
    a répondu
    Oui tu as raison, j'ai oublié cette partie car elle est très floue pour moi, en fait la seule console dont je me sert (avec des compétences très limitées) c'est la console de win scp en SSH.

    J'ai d'ailleurs essayé de me connecter à mysql avec "mysql -u root -p", ca mouline jusqu'à abandonner ... C’était une tentative de passer les plein droits à un user sql pour passer ma requête en load data infile au lieu de local puisque la local me donne une erreur 0- alors que sans local j'ai l'erreur normal de l'access denied

    Je ne connais pas Putty, mais ma console en win SCP revient t'elle au même ? Si oui, je suis dans le *** car lorsque je fais :
    mysql -u root -> access denied (normal)
    mysql -u root -p -> mouline puis deco
    mysql -u root -p motdepasse -> mouline puis deco

    Laisser un commentaire:


  • roland_d_alsace
    a répondu
    Envoyé par Minie Voir le message
    Bonjour,

    après moultes tests ... toujours en echec, mais avec quelques précisions.

    Je suis en dédié, et le local est activé

    Mes tests :

    1. Suppression du "LOCAL" dans la requete sql -> erreur accès denied (normal)
    2. Essai du script hors framework totalement indépendant avec sa propre connexion bdd -> aucune erreur, mais aucune execution SQL
    2.1 Tests avec echo de l'execution de la boucle, du chemin de fichier (encore) -> le dossier est bien lu, le fichier est bien trouvé, mais la requete ne s’exécute pas
    2.2 Test sans le "LOCAL" dans script externe -> pas d'erreur accès denied (pas normal car l'utilisateur n'a pas tous les privilèges)

    Voilà j'en suis là et je n'ai toujours pas réussi à refaire fonctionner ce **** de script qui fonctionnait très bien pendant des mois ...
    C'est donc plutôt un problème mysql.

    Quitte à me répéter, mais as-tu essayé le script sous mysql en mode console (linux) (avec putty ou autre).

    Ton hébergeur a peut-être changé de version mysql ou passé sous mariaDB (le comportement n'est pas toujours tout à fait pareil).

    Laisser un commentaire:

Annonce

Réduire
1 sur 2 < >

C'est [Réglé] et on n'en parle plus ?

A quoi ça sert ?
La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
Comment ajouter la mention [Réglé] à votre discussion ?
1 - Aller sur votre discussion et éditer votre premier message :


2 - Cliquer sur la liste déroulante Préfixe.

3 - Choisir le préfixe [Réglé].


4 - Et voilà… votre discussion est désormais identifiée comme réglée.

2 sur 2 < >

Assistance au forum - Outil de publication d'infos de votre site

Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

UTILISER À VOS PROPRES RISQUES :
L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

Problèmes connus :
FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

Installation :

1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

Archive zip : https://github.com/AFUJ/FPA/zipball/master

2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
et remplacer www. votresite .com par votre nom de domaine


Exemples:
Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/
Pour executer le script: http://www..com/fpa-fr.php

Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/cms/
Pour executer le script: http://www..com/cms/fpa-fr.php

En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
Voir plus
Voir moins

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X