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 d'insertion [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 15
    Points
    15
    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 : 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
     
    -- 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour,

    essaye une requête complète

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Voila j'ai essayé une requête complete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Et comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Merci à tous les deux j'ai combiné vos 2 solutions et ca marche impeccable

    Voila ce que ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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."')";

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    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?

  8. #8
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Il faut utiliser les fonctions d'échappement : pg_escape_string() dans ton cas

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    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

  10. #10
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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 !

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

Discussions similaires

  1. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52
  4. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  5. [PostgreSql] Problème de cadreage de char !!!
    Par moipastoi dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/05/2003, 18h01

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