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 :

SILEX, DOCTRINE et PDO [Doctrine]


Sujet :

ORM PHP

  1. #1
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : décembre 2008
    Messages : 254
    Points : 141
    Points
    141
    Par défaut SILEX, DOCTRINE et PDO
    Bonjour,

    J'aimerai me connecter a une base AS400 depuis mon application SILEX et le seul moyen que j'ai trouvé c'est de passé un objet pdo a doctrine (comme autoriser dans la doc de doctrine, mais rien trouvé a ce sujet dans la doc de silex).

    Mais j'ai toujours l'erreur suivante:

    Fatal error: Class name must be a valid object or a string in /home/api/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php on line 126
    Est il donc impossible de passer un objet PDO a doctrine?

    A savoir que la connexion a mon ODBC avec des fonction classique php (odbc_query) fonctionne parfaitement.


    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
    20
    21
    22
    23
    24
    25
    26
     
    $user   = "user";
    $passwd = "password";
     
    try{
      $dbh = new PDO("odbc:dsn", "$user", "$passwd");
    }
    catch (Exception $e){
        die('Erreur : ' . $e->getMessage());
    }
     
    $app->register(new Silex\Provider\DoctrineServiceProvider(), array(
        'dbs.options' => array(
          'asw' => array(
            'pdo' => $dbh,
          ),
          'mysql' => array(
            'driver' => 'pdo_mysql',
            'host' => '127.0.0.1',
            'dbname' => 'db',
            'user' => 'user',
            'password' => 'pass',
            'charset' => 'utf8',
          ),
        ),
    ));

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    mai 2008
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 575
    Points : 2 437
    Points
    2 437
    Par défaut
    Tu devrais pouvoir le faire avec le driver ibm_db2 (et pas avec PDO). Quelque chose du genre (non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'asw' => array(
            'driver' => 'ibm_db2 ',
            'host' => '127.0.0.1',
            'dbname' => 'db',
            'user' => 'user',
            'password' => 'pass',
          ),

  3. #3
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : décembre 2008
    Messages : 254
    Points : 141
    Points
    141
    Par défaut
    J'avais tenté mais j'ai ce message, j'ai cru comprendre que c'est parce qu'il ne trouve pas les drivers sur le serveur.
    Pourtant ils sont présent puisque le lien odbc les utilisent.

    Fatal error: Call to undefined function Doctrine\DBAL\Driver\IBMDB2\db2_connect() in /home/api/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php on line 35

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    mai 2008
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 575
    Points : 2 437
    Points
    2 437

  5. #5
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : décembre 2008
    Messages : 254
    Points : 141
    Points
    141
    Par défaut
    Oui effectivement.

    Mais mon serveur étant sous debian, il me faut le .so et pas .dll que je n'arrive pas a trouver.
    D’ailleurs je pensais que l'extension pdo_odbc suffisait.

    je ne préfère pas tester la méthode native car j'ai peur que ça interfère avec toutes mes autres connexion odbc qui fonctionnent.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    mai 2008
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 575
    Points : 2 437
    Points
    2 437
    Par défaut
    Si tu te connectes en natif, c'est que ton serveur a déjà tout ce qu'il faut.

    Le souci c'est que Doctrine utilise la fonction ibm_db2 qui dépend de l'extension PECL ibm_db2.

    Il faut donc que tu installes cette extension: http://php.net/manual/fr/ibm-db2.installation.php

    D'ailleurs, la fonction odbc_query que tu utilises ne semble pas non plus être une fonction php, elle vient plutôt d'une bibliothèque PEAR. Comme Doctrine n'utilise pas cette bibliothèque, c'est normal que ça cafouille.

  7. #7
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : décembre 2008
    Messages : 254
    Points : 141
    Points
    141
    Par défaut
    Bon finalement j'ai laissé tombé avec doctrine, je passe directement PDO dans une nouvelle variable de $app ($app['asw']).

    merci pour ton aide.

    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
     
    try{
      $dbh = new PDO("odbc:$dsn", "$user", "$passwd");
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $app['asw'] = $dbh;
    }
    catch (Exception $e){
        die('Erreur : ' . $e->getMessage());
    }
     
     
    $app->get('/all', function () use ($app) {
     
      $reponse = $app['asw']->query("SELECT  ....'");
      $liste =  $reponse->fetchAll(PDO::FETCH_ASSOC);
      return $app->json($liste);
    });

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/10/2012, 18h08
  2. la rapidité entre PDO,Doctrine Db query et Zend_db,
    Par keokaz dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/08/2011, 12h48
  3. [SQL-Server] Souci de connexion avec Doctrine 2.0, PDO et PHP 5.3
    Par ovh dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/06/2010, 15h03
  4. doctrine:insert-sql => PDO Connection Error
    Par nims dans le forum ORM
    Réponses: 1
    Dernier message: 23/04/2010, 23h37

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