Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & PostgreSQL
PHP & PostgreSQL Forum d'entraide sur PostgreSQL avec PHP. Avant de poster -> FAQ PostgreSQL, Cours PostgreSQL. Pour les questions concernant le moteur PostgreSQL plutôt que les fonctions PHP, merci d'utiliser le forum PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/07/2006, 14h04   #1
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
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 :
 INSERT INTO... VALUES... $var
il met met une erreur de syntaxe...

J'ai teste avec les guillemets ("NULL") mais sans résultat...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 14h06   #2
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Ce serait bien de nous montrer l'erreur affichée
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 14h18   #3
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
Warning: pg_query(): Query failed: ERROR: syntax error at or near "," at character 361 in ...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 14h24   #4
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Oui et la requete ?
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 14h27   #5
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
Code :
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...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 14h35   #6
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Et si tu mettais directement comme ceci :
Code :
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é
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 15h05   #7
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
Tout d'abord merci pout ton intérêt,

J'ai tenté avec cette syntaxe mais j'ai toujours le même erreur...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 15h18   #8
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
A la même colonne ???
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 15h26   #9
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
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 :
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...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2006, 15h49   #10
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Code :
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 ['']
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 11h37   #11
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
Il me donne maintenant une nouvelle erreur après cet insert:

Code :
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.
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 12h52   #12
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h16   #13
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
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 :
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?
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h22   #14
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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 ?
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h28   #15
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
Oui, il accepte le null...

la, c'etait pour l'exemple (mal choisi c'est vrai!)... Mais mon champs est de type numeric...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h32   #16
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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 ""
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h35   #17
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
oui c'est ca, je fais un test avant. Suivant le résulat je mets NULL dans ma variable:

Comme cela:

Code :
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...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h38   #18
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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 :
$insertLigneRepas = "insert into tb_test (id, nom)VALUES (5, '$nom')";
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h42   #19
Invité de passage
 
Inscription : février 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 49
Points : 4
Points : 4
j'ai essayé, mais le problème persiste...
el_butcho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h57   #20
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Bon mets ta requete, plus le echo de la requete, plus la structure de la table
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h39.


 
 
 
 
Partenaires

Hébergement Web