erreur 1054 sql insoluble

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

  • erreur 1054 sql insoluble

    bonjour tout le monde.
    J'ai un soucis avec une requête sql.
    Pour une fonctionnalité d'import de fichier csv, j ai intégré une librairie tierce
    pour importer les données de ce fichier dans une table mysql.
    J'ai une erreur 1054, mais je ne sait pas exactement quelle est cette erreur.
    J ai juste le message erreur 1054 qui s'affiche sans avoir le message exact.
    Si' j avais le message complet, je saurait ce qui se passe, mais la je ne l ais pas

    L'import et la création des objets fonctionne,
    et la requete que j'obtiens fonctionne quand je la lances directement sur le serveur mysql
    mais pas losque je l'execute dans joomla.
    La structure de la table est la suivante :

    Code:
     show columns from dx65r_impayes;
    +------------------------+--------------+------+-----+---------+----------------+
    | Field                  | Type         | Null | Key | Default | Extra          |
    +------------------------+--------------+------+-----+---------+----------------+
    | id                     | mediumint(9) | NO   | PRI | NULL    | auto_increment |
    | N� CONTRAT DEFINITIF   | varchar(15)  | YES  |     | NULL    |                |
    | N� CONTRAT INITIAL     | varchar(10)  | YES  |     | NULL    |                |
    | SITUATION              | varchar(50)  | YES  |     | NULL    |                |
    | NOM ASSURE             | varchar(100) | YES  |     | NULL    |                |
    | MOTIF REJET            | varchar(50)  | YES  |     | NULL    |                |
    | DATE DE SITUATION      | varchar(20)  | YES  |     | NULL    |                |
    | CODE APPORTEUR         | varchar(50)  | YES  |     | NULL    |                |
    | CABINET                | varchar(20)  | YES  |     | NULL    |                |
    | DATE DE DEBUT          | varchar(20)  | YES  |     | NULL    |                |
    | DATE DE FIN            | varchar(20)  | YES  |     | NULL    |                |
    | MONTANT                | int(20)      | YES  |     | NULL    |                |
    +------------------------+--------------+------+-----+---------+----------------+
    12 rows in set (0.00 sec)
    le code ci dessous est celui que j'utilise Dans un custom code chronoforms.

    Code:
    <?php
    jimport('csv.parsecsvlib');
    $csv = new parseCSV();
    $file = $form->files['csv']['path'];
    $csv->auto($file); 
    $keys = array_values($csv->titles);
    $keys =  array_filter( array_values($csv->titles));
    //$keys = array_pop ($keys);
    $var = implode('`,`', $keys);
    $var = "`".$var."`";
    echo " var =";
    echo $var;abc_mysql-root_62
    echo '<br />';
    foreach ($csv->data as $value)
     {
    // suppression de la derniere colonne car celle ci est vide
    $var2 = array_pop ($value);
    // j'ai une valeur (montant avec une virgule, donc les instructions ci dessous servent à transformer la virgule en .)
    $var2 = implode ('\';\'', array_filter( $value));
    $var2 = str_replace(',','.',$var2);
    //et je remplace les ; par des ,
    $var2 = str_replace(';',', ',$var2);
    // j integres les caratères de début et fin de chaîne
    $var2 = "'".$var2."'";
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query = "INSERT INTO `dx65r_impayes` ($var) VALUES ($var2)";
    echo $query;
    $db->setQuery($query);
    //$db->execute();
    }
    Le résultat de l'instruction echo $query est le suivant :
    Code:
    requete = INSERT INTO `abcd_impayes` (`N� CONTRAT DEFINITIF`,`N� CONTRAT INITIAL`,`SITUATION`,`NOM ASSURE`,`DATE DE SITUATION`,`MOTIF REJET`,`CODE APPORTEUR`,`CABINET`,`DATE DE DEBUT`,`DATE DE FIN`,`MONTANT`) VALUES ('R56789023', 'F45678912', 'Mise en Demeure', 'PORTAIT JOACHIM', '01/09/2016', 'contestation d�biteur', 'ABCD45678', 'CABINET TRAD1', '01/07/2016', '31/07/2016', '14.97')
    quand je copies cette requete directement dans le sgbd, celle ci fonctionnes, mais pas quand elle est lancée depuis joomla.
    Est ce que quelq'un a une idée de ce qui ne vas pas ?

  • #2
    Re : erreur 1054 sql insoluble

    Le "N�" dans le nom de tes deux champs ne serait-il pas en cause ? L'erreur 1054 correspond à une colonne, donc un champ, introuvable.
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

    Commentaire


    • #3
      Re : erreur 1054 sql insoluble

      Envoyé par RobertG Voir le message
      Le "N�" dans le nom de tes deux champs ne serait-il pas en cause ? L'erreur 1054 correspond à une colonne, donc un champ, introuvable.
      Cest ce que j avais compris aussi...
      je vais tester sans, mais le truc est que si je colle directement la requete dans mysql elle fonctionnes.
      et j'utilise les ` pour remedier à ce soucis.
      J'aurais les message direct, je saurait ce qui se passe, mais la ds joomla j ai juste le numero d'erreur.
      C'est ce qui me pose le soucis.
      J'ai une possibilité pour réecrire les noms de colonnes directement dans la librairie, donc je vais voir ca.
      SI cela fonctionnes en reecrivant les noms de colonnes, je vais devoir ajouter un test pour déterminer le type de fichier (impayes, annulations..) afin de réecrire les entetes (colonnes) en fonction du fichier.

      Commentaire


      • #4
        Re : erreur 1054 sql insoluble

        Merci robert.
        Grace à toi, j'ai enfin trouvé d'ou venait le soucis.
        Cela venais de l'encodage des champs.
        L'encodage par défaut de mysql est l'utf8 et non l iso..
        et l'encodage de mes données et noms de colonnes etait l'iso-8859-1....
        Donc Mysql avait du mal avec les noms de colonnes.
        Donc j'ai ajouté cette ligne juste avant d'utiliser cette instruction générant mes données,
        j'ai recrée la table correspondante avec les champs en utf8 et cela fonctionnes enfin.
        Et en plus cela m a résolu le soucis d'encodage des accents dans les données à insérer.
        Code:
        $csv->encoding('ISO-8859-1','UTF8');
        $csv->auto($file);

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X