martedì 16 settembre 2008

LAMP su ubuntu che usa DB2 su AS400

Scenario: AS/400 con OS/400 V5.4 con DB2 + Ubuntu linux 8.04 con Apache e php

Cosa fare per usare da PHP il database DB2 utilizzando il PDO via ODBC? Per prima cosa bisogna installare l'iseries access su ubuntu come descritto in un post precedente. Quindi:

1 - da terminale installo unix-odbc:

apt-get install unix-odbc

2 - configuro unix-odbc, apro/creo il file /etc/odbc.ini come di seguito, sostituendo la riga in grassetto con l'ip del server AS/400:


[AS400]
Description = iSeries Access ODBC Driver
Driver = iSeries Access ODBC Driver
System = 192.168.0.7
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

NB: il contenuto del file sopra è scopiazzato dal blog di Matteo Moro. Thanks.

Ora da php sul linux si dovrebbe poter accedere al database DB2 su AS/400 via PDO. Vediamo un po' di codice PHP:

infophp();

Con questo si vede la schermata delle info relative al php. Dovrei fra l'altro trovare la voce PDO con indicati vari driver, fra questi deve esserci ODBC (se no va installato il pacchetto php_odbc).
Un'altra voce che devo trovare è PDO_ODBC (che dovrebbe comparire dato che ho messo UnixODBC).

foreach(PDO::getAvailableDrivers() as $driver)
{
echo $driver . " ";
}

Così dovrebbe apparire la lista dei driver che dava anche infophp().
Di seguito proviamo a fare una query, quanto scritto in grassetto va adattato con il nome dell'utente e la password, il nome del database, della tabella su cui fare la query di prova ed il nome di un paio di colonne:

try
{
$db=new TDbConnection("odbc:DSN=AS400;UID=user;PWD=password;","user","password");
echo "Connessione riuscita";
}
catch(PDOExeption $e)
{
echo $e->getMessage();
}

$sql = "SELECT * FROM NOMEDB.NOMETBL";

foreach ($db->query($sql) as $row)
{
print $row['COL1'] .' - '. $row['COL2'] . '
';
}

Fine. Ciao.

1 commento:

Anonimo ha detto...

Good words.