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

MkFramework Discussion :

Prise en compte des schemas dans postgresql


Sujet :

MkFramework

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut Prise en compte des schemas dans postgresql
    Bonjour,

    J'expérimente actuellement, et depuis peu, MkFramework. Mon but est de l'utiliser comme outil de RAD. Le fait qu'il puisse gérer de multiples connexions de bases de données est une des raisons du choix.
    J'utilise mysql, sqlite et intensivement postgresql... mon habitude sous ce sgbd est d'organiser de façon logique les données à l'intérieur de différents schémas... or les paramètres de connexion ne prennent pas en compte ce type d'organisation.
    Ma solution, rapide, a été d'ajouter un paramètre (mkFramework\data\genere\bibliolab\conf\connexion.ini.php) pour le spécifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pdoPostgresqlExple.dsn="pgsql:dbname=postgres;host=localhost"
    pdoPostgresqlExple.sgbd=pdo_pgsql
    pdoPostgresqlExple.schema=schema
    pdoPostgresqlExple.username=postgres
    pdoPostgresqlExple.password=root
    Puis de rajouter dans le connecteur pgsql (mkFramework\lib\framework\sgbd\pdo\sgbd_pdo_pgsql.php) ce petit bout de code à la fonction connect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        protected function connect() {
            if (empty($this->_pDb)) {
                $this->_pDb = new PDO(
                        $this->_tConfig[$this->_sConfig . '.dsn'], $this->_tConfig[$this->_sConfig . '.username'], $this->_tConfig[$this->_sConfig . '.password']
                );
                // patch
                // Si un schema est spécifié dans le fichier de conf
                // on l'indique à la base de donnée.
                if (isset($this->_tConfig[$this->_sConfig . '.schema'])) {
                    $this->_pDb->prepare("SET search_path TO {$this->_tConfig[$this->_sConfig . '.schema']}")->execute();
                }
            }
        }
    Ce n'est certainement pas idéal... et pour l'instant ça ne semble pas fonctionner.

    Si quelqu'un a une solution, je suis preneur...

    En tous cas, merci pour cet étonnant et malin framework, qui fait vraiment gagner beaucoup de temps!

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Billets dans le blog
    17
    Par défaut
    Merci d'abord d'utiliser ce framework

    Pour votre soucis, on ne peux pas le spécifier dans le dsn lors de la création de l'objet pdo ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Citation Envoyé par imikado Voir le message
    Merci d'abord d'utiliser ce framework

    Pour votre soucis, on ne peux pas le spécifier dans le dsn lors de la création de l'objet pdo ?
    Merci , pour la réponse rapide. Malheureusement, non... je n'ai ni réussi, ni trouvé dans la documentation PDO quoique ce soit à ce sujet. j'ai , en fait, détourné une solution de Laravel, mais je ne sais pas si la solution est complète...

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Billets dans le blog
    17
    Par défaut
    Pour le schéma j'ai lu pour "SET search_path TO"

    Et donc dans le framework, dans la classe modele, avant les findMany, findOne
    Un petit:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->execute('SET search_path TO monSchema');

    J'avoue ne pas beaucoup connaitre posgresql, qu'est-ce que sont les schemas ? j'avais déjà entendu parler de ça pour oracle.
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Merci pour le complément de solution qui résout mon problème et permet du même coup d'utiliser les schémas...

    Pour ce que j'en sais, les schémas d'Oracle sont liés aux utilisateurs, alors que ceux de postgresql, je les considère plus comme des espaces de nom. Dans mon cas je les utilise dans le but de séparer logiquement les structures de données, ou bien les applications (sans préfixer, comme avec mysql, mais tout en évitant les collisions), mais ils peuvent aussi, bien sûr, être utilisés pour créer des stockages utilisateurs... surtout si l'on souhaite utiliser la gestion de droit de pgsql, je pense.

    Je teste tout ça demain matin et si tout est ok, je mettrai le sujet en résolu.

    Encore merci!

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Billets dans le blog
    17
    Par défaut
    OK je comprends un peu mieux

    Merci à vous de ce retour d'expérience.
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Bon... désolé, je viens de me rendre compte qu'il fallait aussi modifier d'autres petits trucs... :$

    Dans mkFramework\lib\framework\abstract\abstract_sgbd_pdo.php :

    Code : 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
     
        public function getListTable($schema = 'public') {
     
            if (isset($this->_tConfig[$this->_sConfig . '.schema'])) {
                $schema = $this->_tConfig[$this->_sConfig . '.schema'];
            }
     
            $pRs = $this->query(sgbd_syntax_pgsql::getListTable($schema));
     
            if (empty($pRs)) {
                return null;
            }
     
            $tObj = array();
            while ($tRow = $pRs->fetch(PDO::FETCH_NUM)) {
                $tObj[] = $tRow[0];
            }
            return $tObj;
        }
    Puis dans mkFramework\lib\framework\sgbd\syntax\sgbd_syntax_pgsql.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public static function getListTable($schema){
    		return "SELECT table_name FROM information_schema.tables WHERE table_schema = '". $schema . "'";
    	}
    P'tet que ça suffit pas... faut voir.

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

Discussions similaires

  1. Prise en compte des jars dans WEB-INF
    Par soft_angel dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 28/07/2010, 15h51
  2. Réponses: 3
    Dernier message: 08/11/2009, 11h45
  3. prise en compte des accents dans mes variables
    Par paolo2002 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 29/02/2008, 17h17
  4. Pb de prise en compte des accents dans jdk1.5
    Par NizarK dans le forum Langage
    Réponses: 3
    Dernier message: 23/03/2007, 15h10
  5. [Date dans Mysql] Prise en compte des espaces
    Par tchoukapi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 02/01/2006, 03h41

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