Se connecter à une base IBM DB2 en PHP avec PDO sous Linux Mandriva/Red Hat
Imprimer

Connexion DB2

Mediboard peut avoir besoin de se connecter à d'autres systèmes, en particulier des systèmes administratifs basés sur architecture AS400. Dans ce cadre, il est nécessaire d'installer sur le serveur de Mediboard une connexion DB2 ad hoc.

Connection à la base avec PDO_ODBC

unixODBC

Téléchargez et installez la dernière version rpm de unixODBC. Vous aurez aussi besoin des sources pour compiler PDO plus tard. Si elles ne sont pas présente dans votre RPM, téléchargez les et mettez les de coté dans un répertoire.

Puis téléchargez et installez l'interface graphique d'unixODBC.

  1. Telecharger le rpm d'unixODBC sur RPMFind.net (external link) ou via le package manager
  2. Telecharger le rpm de l'interface graphique sur RPMFind.net (external link) ou via le package manager
  3. Telecharger les sources d'unixODBC (external link)

Remarque sur le téléchargement des sources

Il semble qu'une erreur apparait durant l'installation de PDO ODBC (voir plus bas) en utilisant les sources d'unixODBC les plus récentes (version 2.2.14 à ce jour) :

/path/to/unixODBC/include/sqltypes.h:52:27: error: unixodbc_conf.h: No such file or directory
/path/to/unixODBC/include/sqltypes.h:56:2: error: #error "Needs to know how big a long int is to continue!!!"

Le problème est résolu facilement en téléchargeant l'ancienne version 2.2.12 (external link) des sources.

iSeriesAccess

Ce programme d'IBM permet d'installer les drivers ODBC d'accès aux bases DB2.

L'installation se fera par défaut dans le répertoire /opt/ibm/iSeriesAccess/.

Vous devrez pour cela avoir la librairie libXm.so.3 d'installé, contenue dans le package openmotif. Utiliser en particulier le package de développement -devel)

Création de la connection ODBC

Vous pouvez lancer l'interface graphique depuis la ligne de commande :

$> ODBCConfig &

Création du driver

Dans l'onglet Drivers, créez un nouveau driver (s'il n'est pas déjà présent) avec les champs suivants :

  • Fichier : /etc/odbcinst.ini (driver)

[ODBC]
Trace           = No
TraceFile       = /tmp/sql.log
ForceTrace      = No
Pooling         = No

[iSeries]
Description     = iSeries Access for Linux ODBC Driver
Driver          = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup           = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
Threading       = 2
FileUsage       = 1
DontDLClose     = 1

Remarque: Attention à bien désactiver le mode trace du driver ODBC, lequel est extrêmement verbeux d'après mes essais : environ 50kB par requête SQL !

Création d'un DSN

Dans l'onglet System DSN, créez un nouveau DSN en utilisant le driver que l'on vient d'enregistrer. Puis remplissez les champs suivant :

  • Fichier : /etc/odbc.ini (connecteur)

[db2]
description          = Connector to db2
System               = [nom de l'hote]
User_id              = [nom d'utilisateur] # (optionnel)
Password             = [mot de passe]      # (optionnel)
Naming               = 0
DefaultLibraries     = QGPL
Database             = [nom de la base]    # (optionnel)
ConnectionType       = 0
CommitMode           = 2
ExtendedPkgLibrary   = QGPL
DefaultPackage       = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression = 1
MaxFieldLength       = 32
BlockFetch           = 0
BlockSizeKB          = 1
ExtendedColInfo      = 0
LibraryView          = 0
AllowUnsupportedChar = 0
ForceTranslation     = 0
Trace                = 0

Sauvez cette configuration et quittez l'application. Vous pourrez trouver les deux fichiers contenant ces configuration dans le répertoire /etc/

Remarque: Il semble impératif, y compris pour les serveurs Windows, d'enregistrer le DSN en tant que Sytem DSN et non pas User DSN. Sinon Apache ne parvient pas à la joindre.

PDO

Ensuite, installez PDO (si ce n'est déjà fait) avec PECL :

$> pecl install pdo

Puis installez PDO_ODBC :

$> pecl install pdo_odbc

Il vous sera alors demandé de choisir le flavour. Tapez les informations suivantes :

  • unixODBC,/repertoire/des/sources/unixODBC/

Enfin, dans le php.ini (ou php.d/XX_PDO.ini), rajoutez les lignes suivantes (si elles ne sont pas déjà présentes) :

extension = pdo.so
extension = pdo_odbc.so

Important : Prenez garde à bien installer les prérequis, pas forcément déclarés, de PECL pour permettre l'installation des extensions (cf. Prérequis de PECL).

Code PHP

Pour utilisez l'extension PDO pour accéder à votre base db2, consultez la documentation en ligne de PHP :


Dernièrement modifié par mytto15470 points  , Basé sur le travail de rhum15779 points  .
Modifiée dernièrement le jeudi 17 de septembre, 2009 15h58m16.

Sponsors privilégiés

Mediboard project