In questo post propongo una mini web-application in linguaggio PHP che consente di interagire con un database Microsoft Access. La limitazione principale è che il server deve girare in ambiente Windows. La connessione al database sfrutta la classe COM che fornisce un ambiente idoneo all’utilizzo di diversi tipi di componenti COM come per esempio applicazioni Word, Excel e Powerpoint, ma anche ADO. Questa classe, nel pacchetto PHP per Windows, è integrata nella distribuzione, e non è necessaria nessuna installazione. Per quanto riguarda la versione, sembra che quella minima sia la 4.1.x, ma non ho avuto modo di fare prove. Suggerirei comunque di utilizzare le versioni 5.2.x per stare tranquilli!
Una generica connessione ad un database MS Access, ed il riempimento di un recordset può essere avviata con queste istruzioni:
1 2 3 4 5 6 7 8 | $cn = new COM("ADODB.Connection"); $cnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("./nomeDatabase.mdb").";"; $cn->open($cnStr); $rs = $cn->execute("SELECT * FROM nomeTabella"); ... $rs->Close(); $cn->Close(); |
Tornando alla mini-applicazione che ha uno scopo prettamente dimostrativo, le sue funzioni sono:
- Selezionare una tabella di un file MS Access e mostrare l’elenco dei records
- Selezionare attraverso la chiave primaria un record e modificare uno o più campi
- Selezionare attraverso la chiave primaria un record e cancellarlo
- Inserire un nuovo record
Per poter utilizzare l’applicazione, è necessario innanzitutto modificare le impostazioni definite nel file config.php definendo il nome e il percorso del database, il nome della tabella, il nome e la posizione della chiave primaria e la possibilità di attivare o meno la modifica e cancellazione dei record attraverso i link alla chiave primaria.
Il codice del file principale che mostra la lista dei record e i form per le modfiche, le cancellazioni e gli inserimenti è disponibile leggendo il file test.php.
Un ultimo file: modify.php si occupa di gestire le POST ed effettuare le query di inserimento, aggiornamento e cancellazione.
Alcune annotazioni: per semplificarsi la vita con Access è bene non dare mai il nome “note” ad un campo, perché è una parola chiave. Se proprio fosse necessario, bisognerà riferirsi a quel campo con la forma nometabella.note
.
Altra considerazione: se in PHP è attiva la direttiva magic_quotes_gpc le variabili POST verranno trattate con i caratteri di escape per l’apostrofo.
Per memorizzare questi dati nel database, sarà quindi necessario fare prima uno stripslahes()
e poi rimpiazzare gli apostrofi raddoppiandoli (che è il modo di “escapare” in Access!).
Infine, per motivi di tempo non ho gestito gli errori della classe COM, però è possibile farlo controllando le eccezione tramite la classe com_exception.
Molte curiosità sull’argomento trovano risposta in questa FAQ
Download:
Il pacchetto comprendente tutti i file PHP, il foglio stile e il database MS Access fatture.mdb è scaricabile qui.
Uno screenshot:
Conclusioni:
Sono convinto che le cose che sono nate per stare in coppia diano i risultati migliori, quindi PHP con MySQL. Però avere a disposizione la possibilità di interagire con un database così diffuso e così fortemente legato alle applicazioni Microsoft (Access si sposa bene con Visual Basic!) è un’ottima cosa. Non fosse altro per poter gestire delle emergenze, uno scambio di dati, la migrazione dei dati e via dicendo. O magari semplicemente per non perdere tempo e riutilizzare vecchie applicazioni con il vantaggio delle web-application.
Riferimenti ed approfondimenti:
- PHP: COM Funzioni – Manuale
- PHP: COM – Manuale
- Setting up connection between MS Access and PHP
- Access vs MySQL
- ADOdb Tutorial in Italian
- COM: Component Object Model Technologies
andrea ha scritto:
l’esempio riportato è perfetto!
Alex ha scritto:
Molto utile, sono del parere che gli esempi pratici siano molto più efficaci e comprensibili di una una tonnellata di teoria.
Grazie