IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

PHP / Mysql / Unkonwn column in field list [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut PHP / Mysql / Unkonwn column in field list
    Bonjour,

    J'ai un peu honte mais je n'arrive pas à résoudre ce problème qui semble simple ...

    Plusieurs sujets portent sur le sujet mais je n'arrive pas à faire le lien avec mon problème actuel...

    J'ai créé une table dans une base de données MySQL pour stocker mes informations de téléinfo EDF récupérées par Arduino (classique quoi)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE `teleinfo_edf` (
      `timestamp` varchar(30) NOT NULL,
      `rec_date` varchar(15) NOT NULL,
      `rec_time` varchar(11) NOT NULL,
      `adco` varchar(15) NOT NULL,
      `optarif` varchar(20) NOT NULL,
      `isousc` varchar(11) NOT NULL,
      `ptec` varchar(20) NOT NULL,
      `val_cpt` varchar(15) NOT NULL,
      `iinst` varchar(20) NOT NULL,
      `imax` varchar(20) NOT NULL,
      `papp` varchar(20) NOT NULL,
      `motdetat` varchar(20) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    J'ai un code PHP lancé par mon code Arduino qui fait la liaison avec ma BDD dans lequel je lance la requête générée comme ceci :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "INSERT INTO teleinfo_edf (timestamp, rec_date, rec_time, adco, optarif, isousc, ptec, val_cpt, iinst, imax, papp, motdetat) 
    VALUES ('$vStamp', '$vDATE', '$vTIME', '$vADCO', '$vOPTARIF', '$vISOUSC', '$vPTEC', '$vBASE', '$vIINST', '$vIMAX', '$vPAPP', '$vMOTDETAT')";

    Mais j'obtiens le message suivant :
    Unknown column 'val_cpt' in 'field list' !
    J'ai pensé à un caractère foireux, à un soucis de guillemet simple/double, j'ai même essayé avec toutes les "values" vide mais le même résultat !
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "INSERT INTO teleinfo_edf (timestamp, rec_date, rec_time, adco, optarif, isousc, ptec, val_cpt, iinst, imax, papp, motdetat) VALUES ('', '', '', '', '', '', '', '', '', '', '', '')";

    Du coup je suis complètement paumé ... pourquoi ça coince qu'à la colonne "val_cpt" et pas avant si c'était un problème de guillemet ? Qu'est ce que je vois pas et qui est sous mes yeux ?

    De plus, j'ai récupéré la ligne générée par mon code PHP et je l'ai lancé dans une console MySQL et la ligne s'insère !

    Merci beaucoup pour votre future aide !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Je ne pense pas que ce soit dû à ça mais vu que timestamp est un mot du langage SQL, vous devriez nommer la colonne autrement ou au moins entourer son usage d'apostrophes inversées : `timestamp`

    Vous êtes sûr que ce message d'erreur vient bien sur l'exécution de cette requête ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    A priori il n'y a pas de raison que ça soit une autre requête qui est exécutée car j'ai tenté de changer le nom de la colonne "val_cpt" et le nom était bien mis à jour.

    Je viens de changer "timestamp" en "time_stamp" comme proposé mais ça n'a rien changé. J'ai également ajouté des guillemets ` sur tous les noms des colonnes même problème :
    Erreur dans la requète INSERT INTO teleinfo_edf (`time_stamp`, `rec_date`, `rec_time`, `adco`, `optarif`, `isousc`, `ptec`, `val_cpt`, `iinst`, `imax`, `papp`, `motdetat`) VALUES ('', '', '', '', '', '', '', '', '', '', '', '') : Unknown column 'time_stamp' in 'field list' !
    Voici mon code php entier au cas où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
    include("config.php");
     
    // Requête exemple : http://192.168.1.20/teleinfo_edf/insertionData.php?ADCO=040222186438&OPTARIF=BASE&ISOUSC=30&BASE=051917203&PTEC=TH..AX%20025&PAPP=01350&MOTDETAT=000000&MOTDETAT=000000
     
    echo "ADCO : ".@$_REQUEST['ADCO']."<br />";
    $vADCO=@$_REQUEST['ADCO'];
    echo "OPTARIF : ".@$_REQUEST['OPTARIF']."<br />";
    $vOPTARIF=@$_REQUEST['OPTARIF'];
    echo "ISOUSC : ".@$_REQUEST['ISOUSC']."<br />";
    $vISOUSC=@$_REQUEST['ISOUSC'];
    echo "BASE : ".@$_REQUEST['BASE']."<br />";
    $vBASE=@$_REQUEST['BASE'];
    echo "PTEC : ".@$_REQUEST['PTEC']."<br />";
    $vPTEC=@$_REQUEST['PTEC'];
    echo "IINST : ".@$_REQUEST['IINST']."<br />"; // Obligatoire
    $vIINST=@$_REQUEST['IINST'];
    echo "IMAX : ".@$_REQUEST['IMAX']."<br />";
    $vIMAX=@$_REQUEST['IMAX'];
    echo "PAPP : ".@$_REQUEST['PAPP']."<br />"; // Obligatoire
    $vPAPP=@$_REQUEST['PAPP'];
    echo "MOTDETAT : ".@$_REQUEST['MOTDETAT']."<br />";
    $vMOTDETAT=@$_REQUEST['MOTDETAT'];
     
    $vStamp = time();
    $vToday = getdate($vStamp);
    $vDATE = $vToday['year'].'-'.$vToday['mon'].'-'.$vToday['mday'];
    $vTIME = $vToday['hours'].':'.$vToday['minutes'].':'.$vToday['seconds'];
     
    $mysqli = new mysqli( $serveur, $login, $pass );
    if ( mysqli_connect_errno() ) {
        die( "Failed:" . mysqli_connect_error() );
    }
     
    if ( $mysqli->select_db( $base) ) {
        echo "Connexion et base de données sélectionnée : $base<br />";
    } else {
        echo('Erreur de connexion : ' . mysqli_connect_error());
    }  
     
    // On récupère la dernière date d'insertion d'une trame
    $query = "SELECT MAX(time_stamp) FROM teleinfo_edf";
    $insertionOK = true;
    if($result=$mysqli->query($query)) {
        $row = $result->fetch_row();
    	if(($vStamp-$row[0]) > 60 *5) { // 60 secondes * 5 minutes
            $insertionOK = true;
            echo('Insertion à réaliser<br />');
        } else {
            $insertionOK = false;
            echo('Insertion à ne pas réaliser<br />');
        }
    }
    // Si la trame est plus vieille que 5 minutes j'insère sinon je garde
    if($insertionOK) {
        /* Ancien compteur : ça fonctionnait !
    	$query = "INSERT INTO teleinfo_edf(timestamp, rec_date, rec_time, adco, optarif, isousc, hchp, hchc, ptec, iinst, imax, pmax, papp, hhphc, motdetat, ppot, adir)
        VALUES ($vStamp, '$vDATE', '$vTIME', $vADCO, '$vOPTARIF', $vISOUSC, $vHCHP, $vHCHC, '$vPTEC', $vIINST, $vIMAX, 0, $vPAPP, '$vHHPHC', $vMOTDETAT, 0, 0)";*/
     
    	$query = "INSERT INTO teleinfo_edf (`time_stamp`, `rec_date`, `rec_time`, `adco`, `optarif`, `isousc`, `ptec`, `val_cpt`, `iinst`, `imax`, `papp`, `motdetat`) 
        VALUES ('', '', '', '', '', '', '', '', '', '', '', '')";
        //VALUES ('$vStamp', '$vDATE', '$vTIME', '$vADCO', '$vOPTARIF', '$vISOUSC', '$vPTEC', '$vBASE', '$vIINST', '$vIMAX', '$vPAPP', '$vMOTDETAT')";
     
    	echo "<br />".$query."<br />";
        $result=$mysqli->query($query) or die ("<b>Erreur</b> dans la requète " . $query . " : "  . mysqli_error($mysqli) . " !<br>");
    }
     
    $mysqli.close();
     
    ?>
    Edit :
    Je viens de faire un test par l'absurde, en supprimant le nom des colonnes. Là le message d'erreur change et est encore plus bizarre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO teleinfo_edf VALUES ('1511088273', '2017-11-19', '11:44:33', '0402XXXXXXXX', 'BASE', '30', 'TH..01', '051926433', '025', '00340', '000000')
    Erreur dans la requète INSERT INTO teleinfo_edf VALUES ('1511088273', '2017-11-19', '11:44:33', '0402XXXXXXXX', 'BASE', '30', 'TH..01', '051926433', '025', '00340', '000000') : Column count doesn't match value count at row 1 !
    Le nombre de colonne est bien de 12 dans la table et j'ai bien mis 12 valeurs dans mes "VALUES" ...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    time_stamp a été changé aussi en BDD ?

    on peut voir la structure de la table ?


    [EDIT] Je viens de tester en local :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE `teleinfo_edf` (
      `time_stamp` varchar(30) NOT NULL,
      `rec_date` varchar(15) NOT NULL,
      `rec_time` varchar(11) NOT NULL,
      `adco` varchar(15) NOT NULL,
      `optarif` varchar(20) NOT NULL,
      `isousc` varchar(11) NOT NULL,
      `ptec` varchar(20) NOT NULL,
      `val_cpt` varchar(15) NOT NULL,
      `iinst` varchar(20) NOT NULL,
      `imax` varchar(20) NOT NULL,
      `papp` varchar(20) NOT NULL,
      `motdetat` varchar(20) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $query = "INSERT INTO teleinfo_edf (time_stamp, rec_date, rec_time, adco, optarif, isousc, ptec, val_cpt, iinst, imax, papp, motdetat) VALUES ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l')";
    $result=$mysqli->query($query) or die ("<b>Erreur</b> dans la requète " . $query . " : "  . mysqli_error($mysqli) . " !<br>");
    ?>
    Ainsi que :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "INSERT INTO teleinfo_edf VALUES ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l')";

    Ca fonctionne normalement.

    "On ne nous dit pas tout..."
    Dernière modification par Invité ; 19/11/2017 à 11h56.

  5. #5
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    Oui j'ai fait la modification en base de données également :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE `teleinfo_edf` (
      `time_stamp` varchar(30) NOT NULL,
      `rec_date` varchar(15) NOT NULL,
      `rec_time` varchar(11) NOT NULL,
      `adco` varchar(15) NOT NULL,
      `optarif` varchar(20) NOT NULL,
      `isousc` varchar(11) NOT NULL,
      `ptec` varchar(20) NOT NULL,
      `val_cpt` varchar(15) NOT NULL,
      `iinst` varchar(20) NOT NULL,
      `imax` varchar(20) NOT NULL,
      `papp` varchar(20) NOT NULL,
      `motdetat` varchar(20) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    Edit : Je viens de créer une 2ème table avec ton code CREATE TABLE et fait un copier/coller de ton code php pour l'insertion.
    J'ai un résultat plus qu'étrange !!!
    Erreur dans la requète INSERT INTO teleinfo_edf2 (time_stamp, rec_date, rec_time, adco, optarif, isousc, ptec, val_cpt, iinst, imax, papp, motdetat) VALUES ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l') : Table 'domotique.teleinfo_edf2' doesn't exist !
    J'ai l'impression qu'il y a donc un décalage entre les données en base et mon code PHP comme s'il gardait des choses en cache ou je ne sais pas trop quoi ...

  6. #6
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    Bon je crois avoir trouvé l'origine du problème mais pas comment corriger encore ...

    Mon serveur MySQL et PHP sont sur un serveur Synology en local. Je viens de m'apercevoir qu'il y avait MariaDB 5 et MariaDB 10 d'installé dessus (probablement suite à des mises à jour de DSM) !

    J'ai donc désactivé MariaDB 5 pour tester et là miracle le code ne marche plus du tout, le code php ne se connecte même plus ...
    Failed:No such file or directory
    Evidemment j'ai voulu désactiver le 10 pour conserver que le 5 mais visiblement tous les paquets Synology fonctionnent sur la version 10 (la plus à jour).

    Par conséquent, il faut que je trouve le moyen de dire à PHP d'utiliser le 10 et plus le 5 mais là ... faut que je fouille parce que j'ai jamais fait ça

    Si vous avez des idées n'hésitez pas

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut;

    Sur Synology :
    Maria DB 10 runs on port 3307
    Maria DB 5 runs on port 3306

  8. #8
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    Merci pour l'info je viens de tester ça marche maintenant !

    Le problème ne venait donc pas de mon code mais juste de ma conf serveur ... je comprends mieux pourquoi j'ai pas trouvé de suite

    Merci à tous pour m'avoir aidé !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. unknown column in 'field list'
    Par perla110 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 29/11/2012, 16h19
  2. [MySQL] Erreur SQL ! Unknown column '' in 'field list'
    Par jump-jack dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/09/2009, 19h16
  3. [MySQL] Unknown column in 'field list'
    Par Escudo dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 21/02/2009, 15h21
  4. [MySQL] Unknown column in 'field list'
    Par erfindel dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/06/2008, 16h28
  5. [MySQL] message 'unknown column' concernant 'field list'
    Par thannane dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/02/2007, 08h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo