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. #21
    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
    voici la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $insert = "insert into tb_test (id_test, nom_test)VALUES (5, $nom)";
    Voici l'affichage:

    insert into tb_test (id_test, nom_test)VALUES (5, )

    et la table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE tb_test
    (
      id_test int4 NOT NULL,
      nom_test int4
    )

  2. #22
    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 moi je dis comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $insert = "insert into tb_test (id_test, nom_test) VALUES (5, '$nom')";
    Et le echo est censé te donner :

    insert into tb_test (id_test, nom_test) VALUES (5, '')

  3. #23
    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
    Ok, comme tu me le dis:

    echo donne bien ce que tu dis:

    insert into tb_test (id_test, nom_test)VALUES (5, '')

    Et voici l'erreur:

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

  4. #24
    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
    Alors 2 choses :

    • pg_last_error pour voir l'erreur retournée
    • et tentes une insertion à la main directement sur ta bdd avec les mêmes valeurs.

  5. #25
    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
    voila ce que donne echo pg_last_error($connexion):

    ERROR: invalid input syntax for integer: ""

    Et l'insert à la main me donne exactement la meme erreur...

  6. #26
    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
    Donc ca vient bien de la structure de ta table qui doit certainement pas accepter de valeur null.

    Modifies le champ nom et rajoute les options necessaires pour que ca fonctionne comme par exemple null

  7. #27
    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 recréer la table avec à nouveau le null autorisé...

    MAis toujours le meme problème...

    Mais cette erreur: ERROR: invalid input syntax for integer: ""

    Cela signifie que le SGBD croit que je veux insérer une chaine de caractère et que il me le refuse parce que le champs est de type numeric non?

  8. #28
    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
    Mets directement null dans $nom a ce moment pour voir ce qui se passe

    hmmm ca devient plus du PGSQL que du PHP

  9. #29
    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
    Si je mest comme cela, cela tourne:

    $insert = "insert into tb_test (id_test, nom_test)VALUES (5, null)";

    L'insertion fonctionne...

  10. #30
    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 voilà tu as trouvé la solution

    tu crées ta requete en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $insert = "insert into tb_test (id_test, nom_test)VALUES (5, '".((empty($nom))?("null"):($nom))."')";

  11. #31
    Invité
    Invité(e)
    Par défaut
    Pourrais-tu mettre la valeur nulle par défaut pour le champ nom et tester avec le code si dessous.

    Remplace aussi la valeur de $nom pour tester la deuxième condition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom numeric null default null,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $nom = NULL;
     
    $connexion = pg_connect("user=postgres password=postgres dbname=bd_test host=localhost");
     
     
    if(is_null($nom))
    {
    $insertLigneRepas = "insert into tb_test (id)VALUES (5)";
    }
    else
    {
    $insertLigneRepas = "insert into tb_test (id, nom)VALUES (5, $nom)";
    }

  12. #32
    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
    oh la, merci mais pourrais-tu m'expliquer la signification de ce bout de code:

    ".((empty($nom))?("null")$nom))."

    Il me met toujours une erreur:

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

    ERROR: invalid input syntax for integer: "null"

  13. #33
    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
    empty($nom)
    Teste si $nom est vide ou non

    ?("null")
    Si c'est vide on met null
    :$nom
    Sinon on met la valeur qui est dans $nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "insert into tb_test (id_test, nom_test) VALUES (5, '".((empty($nom))?("null"):($nom))."')";
    Le echo te donne bien la requete que tu avais plus haut avec le null ?

  14. #34
    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 sauf qu'il y des guillemets autour du null ('null') et c'est pour cela je pense qu'il me donne cette erreur

  15. #35
    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
    Ou essayes plutot comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "insert into tb_test (id_test, nom_test) VALUES (5, ".((empty($nom))?(null):("'$nom'")).")";

  16. #36
    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
    Citation Envoyé par Mygale1978
    Pourrais-tu mettre la valeur nulle par défaut pour le champ nom et tester avec le code si dessous.
    J'ai teste mais je crois pas qu'il m'autorise à mettre null par défaut...

  17. #37
    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
    voici l' echo :

    insert into tb_test (id_test, nom_test) VALUES (5, )

    Idem qu'avant, donc meme erreur...

  18. #38
    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
    dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "insert into tb_test (id_test, nom_test) VALUES (5, ".((empty($nom) || $nom == 'null')?(null):("'$nom'")).")";
    $nom == 'null'
    Ca correspond à la valeur null si tu mets null à la base dedans.

  19. #39
    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
    Toujours le même erreur...

  20. #40
    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
    Dernière solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nom = (empty($nom)||$nom = NULL)?(NULL):$nom;
    insert into tb_test (id_test, nom_test) VALUES (5, $nom)";

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