connection symfony2-base DB2
Sous wampserver 2.2 et symphony 2.3.3 sur windows7 en octobre 2013
php app/console doctrine:mapping:convert yml ./src/Phil/SuiviBundle/Resources/config/doctrine/ --from-database –force
gènère une erreur :
Citation:
PHP Fatal error: call to undefined function Doctrine\DBAL\Driver\IBMDB2\db2_connect() in ../vendor\doctrine\DBAL\Driver\IBMDB2\DB2Connection.php line 35
2 façons de connecter db2 a symfony (voir fichier app_dev.php ****) :
- Native
- Pdo.
Les 2 types de connexion peuvent s'appuyer sur ODBC
Tout d'abord vérifier que php_pdo_odbc.dll est présent dans le répertoire des extensions *
Si non, télécharger, dézipper et copier dans ce répertoire. Ajouter dans php.ini ** : extension=php_pdo_odbc.dll.
En native :
- App_dev.php : choisir comme Driver IBM DB2 (native)
Si vous vous arrêtez-là, très certainement vous aurez une erreur :
Citation:
PHP Fatal error: call to undefined function Doctrine\DBAL\Driver\IBMDB2\db2_connect() in ../vendor\doctrine\DBAL\Driver\IBMDB2\DB2Connection.php line 35
Ce qu'il faut faire :
- Télécharger le fichier php_ibm_db2.dll *** sur sourceforge.net
- Dezipper et installer dans le répertoire des extensions de PHP
- Ajouter dans php.ini de php : extension=php_ibm_db2.dll,
- Redémarrer le serveur web
En pdo :
- Vérifier l'existence du fichier php_pdo_ibm.dll dans le répertoire des extensions php. Si non présent, télécharger, dézipper et copier dans ce répertoire.
- Ajouter dans php.ini de php : extension = php_pdo_ibm.dll,
- Redémarrer le serveur web
Si vous vous arrêtez-là très certainement vous aurez une erreur
Citation:
PDOException : coud not find driver
Il faut modifier le fichier Driver.php qui se trouve dans vendor\doctrine\dbal\lib\doctrine\dbal\Driver\PDOIBM. Dans la méthode privée _constructPdoDsn remplacer $dsn = 'ibm;'; par $dsn = 'odbc:DRIVER={IBM DB2 ODBC DRIVER};';.
Si vous relancez la commande doctrine:mapping:convert vous n'aurez plus de message d'erreur par rapport à la connexion mais vous aurez quand même un message d'erreur
Citation:
no metadata classes to process
.
La bonne nouvelle c'est que vous avez une connexion symfony-db2 valide. La mauvaise c'est qu'en php-db2 il est impossible d'accéder aux métadata.
* où se trouve le répertoire des extensions ? C'est le répertoire indiqué par la colonne extension_dir à partir d'un phpinfo();
** Attention : php (ex la version 5.3.13) contient plusieurs fichier php.ini. Le fichier php.ini à modifier est celui qui se trouve dans le répertoire indiqué par la ligne Loaded Configuration File à partir d'un phpinfo().
*** Attention des mauvais fichiers php_ibm_db2.dll sont en circulation. Il faut télécharger un des fichiers sur sourceforge.net, celui qui correspond à votre architecture et à votre version de compilateur apache/php.
Pour connaitre votre architecture :
- dans windows : démarrer -> tous les programmes->système et sécurité->système : type de système (exemple système d'exploitation 32 bits)
- à partir d'un phpinfo() répérer la ligne architecture (exemple x86)
Pour connaître votre compilateur:
A partir d'un phpinfo() répérer la ligne "Compiler"
Personnellement, j'ai installé le fichier php_ibm_db2-ver-(nts_ts)-vc(6|9)-x86.zip
**** : le contenu de ce fichier correspond à la page welcome de Symfony après installation et paramétrage du framework sur votre serveur web. On le lit dans un navigateur web à l'adresse http://nom_serveur_web/nom_repertoir...li/app_dev.php