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 05/06/2007, 11h44   #1
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Par défaut [PostGreSQL] Problème d'insertion

Bonjour,

J'ai un probleme au niveau des insertions dans ma base PostGres SQL, je vais tout d'abord vous donner le schéma de ma table :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
-- Table: clients
 
-- DROP TABLE clients;
 
CREATE TABLE clients
(
  id_client integer NOT NULL,
  "login" character varying(32) NOT NULL,
  nom text NOT NULL,
  societe character varying(64) NOT NULL,
  email character varying(64) NOT NULL,
  adr1 character varying(128) NOT NULL,
  codepost integer NOT NULL,
  ville text NOT NULL,
  tel character varying(64) NOT NULL,
  fax character varying(64),
  horaire character varying(64) NOT NULL,
  jfermeture text NOT NULL, -- ...
  "password" character varying(20) NOT NULL,
  CONSTRAINT "Clients_pkey" PRIMARY KEY (id_client)
)

Je fais une migration des données d'une base MySQL vers ma base PostGres, ma requete d'insertion est la suivante :

Code :
1
2
 
$requetePgSQL="INSERT into clients values($id[0],$login,$nom,$societe,$mail,$adr,$cp,$ville,$tel,$fax,$horaire,$fermeture,$pswd)";
Seulement dès qu'un champ contient un espace ou un tiret...etc la requête plante

Pourtant du côté MySQL les champs sont des VARCHAR, et du côté PostGres des character varying, je pense que c'est exactement la même chose, corrigez moi si je me trompe.

Merci d'avance pour votre aide
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 12h18   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Bonjour,

essaye une requête complète

Code :
1
2
 
$requetePgSQL="INSERT into clients('id_client','login','nom',.......) values($id[0],$login,$nom,$societe,$mail,$adr,$cp,$ville,$tel,$fax,$horaire,$fermeture,$pswd)"
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 13h03   #3
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Voila j'ai essayé une requête complete :

Code :
1
2
3
 
/*ligne32*/$requetePgSQL="INSERT into clients ('id_client','login','nom','societe','email','adr','codepost','ville','tel','fax','horaire','jfermeture','password') values($id[0],$login,$nom,$societe,$mail,$adr,$cp,$ville,$tel,$fax,$horaire,$fermeture,$pswd)";
/*ligne33*/pg_query($connectPgSQL,$requetePgSQL);
Et voila l'erreur qu'il me retourne :

Citation:
Warning: pg_query(): Query failed: ERROR: syntax error at or near "'id_client'" at character 22 in d:\licence\stage sbe\migration bdd\migration_clients.php on line 33
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 13h13   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Dans la documentation de la fonction INSERT de PostgreSQL ils n'ont pas l'air de mettre des quote autour des noms des champs mais seulement autour des valeurs, donc essaies de les retirer pour voir (et si ca ne marche toujours pas, de les mettre autour des valeurs de type string cette fois)

http://www.postgresql.org/docs/7.4/i...ql-insert.html
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 13h13   #5
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Et comme ceci

Code :
1
2
3
 
/*ligne32*/$requetePgSQL="INSERT into clients (id_client,login,nom,societe,email,adr,codepost,ville,tel,fax,horaire,jfermeture,password) values($id[0],'".$login."','".$nom."','".$societe."','".$mail."','".$adr."',$cp,'".$ville."',$tel,$fax,$horaire,'".$fermeture."','".$pswd."')";
/*ligne33*/pg_query($connectPgSQL,$requetePgSQL);
Il me semble avoir entouré tous les string
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 13h39   #6
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Merci à tous les deux j'ai combiné vos 2 solutions et ca marche impeccable

Voila ce que ca donne :

Code :
1
2
 
$requetePgSQL="INSERT into clients (id_client,login,nom,societe,email,adr,codepost,ville,tel,fax,horaire,jfermeture,password) values($id[0],'".$login."','".$nom."','".$societe."','".$mail."','".$adr."','".$cp."','".$ville."','".$tel."','".$fax."','".$horaire."','".$fermeture."','".$pswd."')";
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 14h07   #7
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Cette fois ci j'ai un problème avec les champs qui contiennent des apostrophes.
L'insertion ne fonctionne pas pour ceux la.

Une idée?
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 14h12   #8
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Il faut utiliser les fonctions d'échappement : pg_escape_string() dans ton cas
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 15h41   #9
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Citation:
Envoyé par koopajah
Il faut utiliser les fonctions d'échappement : pg_escape_string() dans ton cas
Oh merci beaucoup a toi, je ne connaissais pas cette fonction. Ca vient de m'éviter de me prendre la tete a vérifier le contenu de chaque champs et à remplacer si besoin était les caracteres "interdits" . J'étais lancé pour faire ca avec ereg() pour la recherche et str_replace() pour remplacer.

MERCI MERCI MERCI ENCORE
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 16h49   #10
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Bah de rien, a force de lire sur ce forum j'apprends aussi beaucoup d'astuces très utiles !
Penses a mettre ton sujet en résolu maintenant que tout marche !
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h51.


 
 
 
 
Partenaires

Hébergement Web