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

ORM PHP Discussion :

Insertion SQL avec utilisation de fonction PostGeSQL/PostGIS


Sujet :

ORM PHP

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Insertion SQL avec utilisation de fonction PostGeSQL/PostGIS
    Bonjour les connaisseur,

    Est-il possible d'exécuter une telle requête avec Symfony / Doctrine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO marac VALUES ( 1, 'point', GeometryFromText( 'POINT(10 70)', -1 ) );
    Voici ce que j'ai essayé de faire dans ma méthode (action) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            $marac = new Marac();
            $marac->id = 2;
            $marac->genre = 'point';
            $marac->the_geom = "GeometryFromText( 'POINT(".$this->x." ".$this->y.")', -1 )";
            $marac->save();
    L'erreur que j'ai c'est :

    500 | Internal Server Error | Doctrine_Connection_Pgsql_Exception
    SQLSTATE[XX000]: Internal error: 7 ERREUR: parse error - invalid geometry
    HINT: You must specify a valid OGC WKT geometry type such as POINT, LINESTRING or POLYGON

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Le problème vient de la fonction SQL spécifique "GeometryFromText".

    Je ne sais pas quel est le schéma (shema.yml) de ta table, mais je suppose que tu as déclaré le champ "the_geom' sous forme de string.

    A partir de là, doctrine va tenter d'y stocker une string en échapant le texte envoyé pour empêcher tout piratage de la table. Ce qui du coup détruis ta fonction et empêche l'exécution du SQL.

    Je suppose que le moteur SGBDR utilisé est PostgreSQL. Je ne vois pas trop de solution, il n'existe pas de champs de type GeometryColumn en doctrine. Et il faudrait lui envoyer la donnée retravaillée par une fonction PHP et non pas SQL.

    Il est peut-être possible d'écrire un add-on à doctrine pour lui rajouter ce type de champ et d'y inclure directement les méthodes SQL pour y stocker l'information et pour la récupérer, mais je ne suis jamais descendu si profondément dans les entrailles de Doctrine. Ce qui me permet de comprendre ton erreur, mais pas de proposer une solution.

    Maintenant, en fonction de ce que tu recherches, il est peut-être possible de trouver une solution plus générale (pas limitée à PostgreSQL) à tes besoins.

Discussions similaires

  1. Insertion SQL avec boucles foreach
    Par vinceom92 dans le forum Langage
    Réponses: 44
    Dernier message: 12/07/2014, 20h02
  2. Problème insertion SQL avec Java
    Par lemzo84 dans le forum Persistance des données
    Réponses: 11
    Dernier message: 28/10/2012, 15h58
  3. [AC-2003] Requête SQL avec SUM en fonction d'un attribut
    Par Linuss dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/05/2012, 10h10
  4. prb création d'une fonction utilisant des fonctions de postgis
    Par Benjamin_es dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/03/2007, 12h34
  5. [sql server]utiliser Insert avec une clé auto
    Par nourbane dans le forum ASP
    Réponses: 6
    Dernier message: 19/05/2006, 00h02

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