Accedere ad un database Access da Linux tramite driver ODBC

 

Mi è capitato di dover estrarre dei dati da un database Access tramite un script PHP.

La soluzione più immediata che mi è venuta in mente è stata quella di accedere al database tramite le API ODBC.

Essendo la mia una Linux box (in particolare ho al momento una Ubuntu 9.10) ho provveduto ad installare l'interprete PHP e i driver ODBC per linux tramite i seguenti comandi:

sudo apt-get install unixodbc
sudo apt-get install unixodbc-bin
sudo apt-get install libmdbodbc
sudo apt-get install php5-cli
sudo apt-get install php5-odbc

A questo punto bisogna configurare il datasource ODBC indicando la posizione del database Access (il file .mdb) al quale vogliamo accere. Se fossimo stati sotto Microsoft Windows avremmo configurato il tutto dal pannello di controllo, ma sotto linux dovremo utilizzare dei tool appositi (a tal proposito consultare il manuale il quale è abbastanza chiaro) oppure modificare qualche file di configurazione. 
Scegliamo la seconda via:

creiamo il file /etc/odbcinst.ini ed aggiungiamo le seguenti righe:

[MDB]
Description = Driver per l'accesso a database Access
Driver = /usr/lib/libmdbodbc.so.0
Usage = 1
FileUsage = 1 

creiamo il file /etc/odbc.ini ed aggiungiamo le seguenti righe:

[NomeDataSource]
Description = Il nostro database access
Driver = /usr/lib/libmdbodbc.so.0
Database = /var/db/dbAccess.mdb 

Al posto di NomeDataSource potete mettere il nome che preferite.

 A questo punto possiamo accedere al database Access da PHP . Ecco ad esempio uno script che visualizza l'elenco delle tabelle presenti nel database:

#!/usr/bin/php
<?php

$dsn = "NomeDataSource";
$username = "";
$password = "";

$conn = odbc_connect($dsn, $username, $password) 
        or die(odbc_errormsg());

// Ottengo l'elenco delle tabelle presenti nel database
$result = odbc_tables($conn);
while ($row = odbc_fetch_object($result)) {
    if($row->TABLE_TYPE == 'TABLE') {
            print $row->TABLE_NAME . "\n";
        }
}
odbc_free_result($result);

odbc_close($conn);
?>

per eseguirlo create un file (es. lo chiamate mdblist) e incollate lo script precedente. Poi dategli i permessi di esecuzione (es. chmod a+x mdblist) ed eseguitelo (es ./mdblist)

A questo punto potete modificare lo script utilizzando le API ODBC messe a disposizione da PHP per eseguire query o altro (n.b. le query si eseguono attraverso la funzione odbc_exec)