Accesso ad un database DB2 via PHP

From RVM Wiki
Revision as of 17:13, 22 June 2006 by Gabriele.vivinetto (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Procedimento Generico

Il procedimento non è dissimile da quanto faresti su una macchina windows, servono :

  1. i drivers di connessione ( forniti con il Client Access(tm) di IBM (c) )
  2. un server ODBC ( unixODBC in questo caso )
  3. php compilato con il supporto unixodbc

procedimento :

  1. installiamo unicODBC, sia da sorgenti che da precompilato non ci sono problemi
  2. installare il Client Access(tm) , scaricandolo dal sito del produttore www.ibm.it ( si deve essere registrati
  3. ricompilare php ( se nn lo volete ricompilare basta aggiungere il php-unixodbc )

adesso creiamo il connettore , io ho una macchina dedicata quindi il connettore è universale.

editiamo il file odbc.ini ( è in /etc/ oppure , a seconda delle installazioni in /etc/unixODBC )

cmq ecco qui un esempio :

[NOME_CONNESSIONE]
Description             = iSeries Access ODBC Driver
Driver          = iSeries Access ODBC Driver
System          = HOST_AS400
Naming          = 0
DefaultLibraries                = QGPL
Database                =
ConnectionType          = 0
CommitMode              = 2
ExtendedDynamic         = 1
DefaultPkgLibrary               = QGPL
DefaultPackage          = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression            = 1
LibraryView             = 0
AllowUnsupportedChar            = 0
ForceTranslation                = 0
Trace           = 0


L'user e la password sono inutili , dato che la connessione viene aperta da un successivo script php

Per utilizzare il tutto si usano le funzioni odbc di php

per adesso è stato testato su Slackware , Debian, Ubuntu Breezy 32bit, Ubuntu Dapper 32bit. Sarei interessato a qualcuno che potesse fornmirmi il supporto hardware per testare l'install su architetture 64bit

Particolarità per Ubuntu

Distro : Ubuntu 5.10 Opzioni : pazienza mode Paranoic


(dico quello che segue presumento che ci sia gia odbc )

1) recuperato iSeries in rpm ...

2) alien -k pacchetto.rpm

3) installato il file deb : dpkg -i nuvo_pacchetto.deb

4) andato in /opt/ibm/iSeriesAccess e dato il cat del file unixodbcregistration

cat unixodbcregistration > /etc/odbcinst.ini


5) adesso viene la rogna , bisogna installare delle lib di gcc3.3 ( ? approfondiro' ) le libstdc++5

6) fatto questo reload ed è turtto finito.

ho notato che in sistemi debian based, che le lib di iSeresiesAccess fanno fatica ad essere linkate ( non sono capace io, è troppo disumana quell'accrocchio ) per cui ho semplicemente pensato di lincare le lib presenti in /opt/ibm/iSeriesAccess/lib/ in /usr/lib/

Connessione PHP

connessione al db dell'as400

il NOME_DSN è quello precedentemente dichiarato nel file odbc.ini

// apriamo la connesisone
$ASdbname="NOME_DSN";
$ASdbuser="NOME_UTENTE";
$ASdbpwd="PASS_UTENTE";
$ASdb=odbc_connect($ASdbname,$ASdbuser,$ASdbpwd) or die ("error");


// chiudiamo la risorsa allocata
odbc_close($ASdb);


in as400 una query viene fatta in questo modo

select * libreria/tabella


l'inteprete odbc , con "/" darà errore durante il parsing al motore db2. Quindi in php via odbc una query verso una tabella AS400 deve essere fatta sostituendo "/" con ".", in questo modo

$query="select * from libreria.tabella";


nota sull'odbc_exec():

l'odbc_exec() ha la stessa funzione di mysql_query(), ma differentemente va prima dichiarata la connessione ( basandomi sul esempio di apertura connesione , $ASdb) e solo dopo la query.

odbc_exec($ASdb, $query);


poi si va avanti .


Riferimenti