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 :

[PostgreSQL] Problème de syntaxe (NULL) avec PHP et Postgresql


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut [PostgreSQL] Problème de syntaxe (NULL) avec PHP et Postgresql
    Bonjour,

    j'aimerais réaliser une insertion dans ma BD Postgres. Je fait tout d'abord un traitement et à la suite de cela, je récupère des valeurs que je mets dans des variables.

    Certaines variables peuvent etre null. Je mets donc:

    Mais quand je veux insérer dans ma BD cette valeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     INSERT INTO... VALUES... $var
    il met met une erreur de syntaxe...

    J'ai teste avec les guillemets ("NULL") mais sans résultat...

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ce serait bien de nous montrer l'erreur affichée

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Warning: pg_query(): Query failed: ERROR: syntax error at or near "," at character 361 in ...

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Oui et la requete ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tb_ligne_commande_repas (id_ligne_commande_repas, id_cuisson_ligne_commande_repas, id_beurre_ligne_commande_repas, id_accompagnement_li_com_repas, id_commande_ligne_comm_repas, id_repas_ligne_commande_repas, id_sauce_ligne_commande_repas, nbre_fois_repas, demi_portion, legume, envoye_cuisine) VALUES (NEXTVAL ('sequence_tb_ligne_commande_repas'), '$cuisson', '$beurre', '$accompagnement',  '$idCommandeFinal', '$idRepas', '$sauce', '$nbreFoisConso', $demi_portion, FALSE, FALSE)
    $cuisson, $beurre, $accompagnement et $sauce peuvent être à null...

  6. #6
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Et si tu mettais directement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tb_ligne_commande_repas (id_cuisson_ligne_commande_repas, id_beurre_ligne_commande_repas, id_accompagnement_li_com_repas, id_commande_ligne_comm_repas, id_repas_ligne_commande_repas, id_sauce_ligne_commande_repas, nbre_fois_repas, demi_portion, legume, envoye_cuisine) VALUES ('$cuisson', '$beurre', '$accompagnement',  '$idCommandeFinal', '$idRepas', '$sauce', '$nbreFoisConso', '$demi_portion', 'FALSE', 'FALSE')
    Pour info ton warning te disait ou se trouve la probable erreur.
    Aussi ta clé primaire est en auto-inc tu peux mettre ta requete directement comme je te l'ai donné

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Tout d'abord merci pout ton intérêt,

    J'ai tenté avec cette syntaxe mais j'ai toujours le même erreur...

  8. #8
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    A la même colonne ???

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Oui toujours la même chose...

    Mais je vais pouvoir m'arranger autrement... Mais j'ai une autre question, je tente de faire un select du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count (*) FROM tb_test where no_test = NULL;
    Il me répond 0 alors qu'il y a bien un enregistrements qui ne contient pas de no_test...

  10. #10
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count (*) as total FROM tb_test where no_test = NULL;
    Ensuite pour la récupération tu fais comme d'habitude sauf que c'est total que tu mets entre ['']

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Il me donne maintenant une nouvelle erreur après cet insert:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tb_ligne_commande_repas (id_ligne_commande_repas, id_cuisson_ligne_commande_repas, id_beurre_ligne_commande_repas, id_accompagnement_li_com_repas, id_commande_ligne_comm_repas, id_repas_ligne_commande_repas, id_sauce_ligne_commande_repas, nbre_fois_repas, demi_portion, legume, envoye_cuisine) VALUES (NEXTVAL ('sequence_tb_ligne_commande_repas'), 3, 7, 6, FALSE, FALSE, FALSE)
    Et voici l'erreur:

    ERROR: column "id_commande_ligne_comm_repas" is of type numeric but expression is of type boolean
    HINT: You will need to rewrite or cast the expression.

  12. #12
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ben c'est clair...Dans la structure de ta table le champs est de type numeric et tu lui passes dans ta requete un booléen (true ou false) donc il faudrait soit revoir la structure soit mettre ton booléen en numeric

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Oui désolé erreur d'inattention...

    Mais ceci réglé, j'ai toujours ce problème de null à insérer dans la base:

    Voici un exemple précis de ce que j'aimerais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nom = '';
     
    $connexion = pg_connect("user=postgres password=postgres dbname=bd_test host=localhost");
     
    $insertLigneRepas = "insert into tb_test (id, nom)VALUES (5, $nom)";
    J'aimerais insérer la valuer null au champs nom. Ce champs est de type numériqu et il me met cette erreur :

    Warning: pg_query(): Query failed: ERROR: invalid input syntax for integer: ""...

    Alors comment faire pour insérer une valuer null dans un champs numérique? Est-il possible de "caster" la variable?

  14. #14
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    TOujours dans la structure de ta table ton champs accepte-t-il la valeur null ?
    Pourquoi ton champs non est du type numeric ? nom c'est pas une chaine de caractères ?

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Oui, il accepte le null...

    la, c'etait pour l'exemple (mal choisi c'est vrai!)... Mais mon champs est de type numeric...

  16. #16
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Selon ton warning tu veux inserer une valeur vide dans un champ numéric...Il me semble que tu peux mettre null mais pas "". Donc il faudrait certainement faire un test avant la requete pour mettre null à la place de ""

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    oui c'est ca, je fais un test avant. Suivant le résulat je mets NULL dans ma variable:

    Comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nom = NULL;
     
    $connexion = pg_connect("user=postgres password=postgres dbname=bd_test host=localhost");
     
    $insert = "insert into tb_test VALUES (5, $nom)";
    et si je fais un echo de $insert:

    insert into tb_test VALUES (5, )


    Donc cela ne peut pas jouer...

  18. #18
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ah no je suis bête . ca vient de la construction de ta requete.

    De la manière que tu l'as construite tu auras toujours des problèmes d'insertion. Voilà ce que tu fais pour une valeur null :

    Insert into nomtable (tes champs..) VALUES (...., );

    Pour lui une requete comme ca lui pose problème donc il faut formater ta requete correctement.Essayes plutot une requete de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $insertLigneRepas = "insert into tb_test (id, nom)VALUES (5, '$nom')";

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    j'ai essayé, mais le problème persiste...

  20. #20
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Bon mets ta requete, plus le echo de la requete, plus la structure de la table

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2012, 00h01
  2. [MySQL] problème de liste déroulante avec php
    Par lamou23 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/06/2010, 21h12
  3. [PostgreSQL] [PostGreSQL] problème sur une fonction avec connexion
    Par roblescriso dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/06/2008, 18h03
  4. [PostgreSQL] [PostGreSQL] Création d'une bdd avec PHP
    Par damien150 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/03/2007, 16h13
  5. [SQL] probleme de syntaxe sql avec php
    Par kaygee dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/06/2006, 14h32

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