Interazione tra Php ed Ms Access

Siti dinamici con PHP
Impara a creare siti dinamici professionali con PHP

Scritto da Luca Ruggiero nella sezione Php

Concesso in esclusiva a MrWebmaster.it - E' vietata la pubblicazione senza espresso consenso del proprietario

Introduzione

L'interazione tra PHP ed i database trova la sua massima espressione con MySQL, sia su sistemi Linux che su sistemi Windows. Su Windows PHP è in grado di lavorare anche con database diversi da MySQL, sfruttando a pieno le caratteristiche e le interfacce richieste da DBMS differenti. PHP è quindi capace di lavorare anche con Ms Access e con Ms SQL Server: in questo Articolo vedremo come PHP interagisce con Access.

L'interfaccia tra qualsiasi linguaggio di programmazione, sia Web che WUI, con DBMS di casa Microsoft, ad esempio proprio Access, è ADO (ActiveX Data Object) già noto ad i programmatori ASP, ASP.NET e Visual Basic.

Prima di iniziare con la spiegazione di ADO e del suo utilizzo attraverso PHP e prima di implementare degli esempi, sento il dovere di dire che l'accoppiata PHP con un DBMS di casa Microsoft non è delle più consigliabili e performanti, ma tuttavia perfettamente funzionante.

Le conoscenze richieste per la piena comprensione di questo Articolo sono:

  • PHP e la sua sintassi base
  • ADO, almeno le basi
  • Ms Access, almeno un minimo di dimestichezza con la sua interfaccia visiva
  • SQL, almeno le basi
Buona lettura!

Struttura del database di prova

Per l'implementazione di qualche esempio pratico creeremo il file Access database.mdb composto dalla sola tabella utenti, a sua volta composta dai campi id (Contatore), nome (Testo) e cognome (Testo).

Posizionate il database sul vostro server Web personale, Apache o EasyPHP che sia, ad esempio sotto il percorso di prova
C:percorso_fisicodatabase.mdb
dove percorso_fisico è l'indirizzo fisico del vostro server Web personale, installato, come nell'esempio, sulla partizione C.

Il database è pronto. Proseguiamo.

Introduzione ad ADO

ADO è una libreria di casa Microsoft che permette l'interazione con DBMS di casa Microsoft stessa o con altri DBMS, ad esempio con MySQL per il suo utilizzo con ASP.

ADO mette a disposizione tre oggetti fondamentali: Connection, Recordset e Command. In questo Articolo utilizzeremo i primi due che servono rispettivamente a gestire la connessione ed a gestire i dati. Il terzo è un oggetto specialistico, ottimo ma non troppo usato nemmeno dai programmatori di stampo Microsoft, se non in occasioni particolari.

Nota per i programmatori ASP: cari colleghi :-) come me siete abituati ad utilizzare il carattere punto (.) per separare il nome della variabile che contiene, ad esempio la connessione, col metodo o con la proprietà da utilizzare; in PHP, per la sola interazione con ADO, si usa come separatore la forma ->
variabile->metodo
ricordatelo!

Stabiliamo la connessione al database

Creiamo adesso sul nostro server Web una directory di prova, ad esempio phpaccess ed inseriamo all'interno il file connessione.php contenente il seguente codice:
<?PHP
    $db = "C:percorso_fisicodatabase.mdb";
    $sc = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$db;";
?>
La variabile $db contiene il percorso fisico del file database.mdb mentre la variabile $sc contiene la stringa di connessione OLEDB al database; questo file verrà incluso in tutti i file PHP che effettueranno operazioni sul database in questione.

Lettura dei dati

Per eseguire la lettura dei dati creiamo sul server, nella cartella di prova, il file leggi.php; di seguito il codice commentato del file:
<html>
    <head>
        <title>Interazione tra PHP ed Ms Access</title>
    </head>
<body>

<?PHP
    // Includo il file contenente la stringa di connessione
    include("connessione.php");

    // Creo due oggetti COM contenenti gli oggetti Connection e Recordset
    $cn = new COM("ADODB.Connection");
    $rs = new COM("ADODB.Recordset");

    // Apro la Connection ed il Recordset
    $cn->open($sc);
    $rs->Open("SELECT * FROM utenti", $cn);

    // Controllo che sulla tabella ci siano dati
    if ($rs->EOF) print "<p>Nessun dato trovato</p>";
    // Se ce ne sono effettuo un ciclo di lettura
    else while ($rs->EOF == FALSE)
    {
        print "<p>";
        print "<b>Nome:</b> " . $rs->Fields ['nome']->value;
        print "<br>";
        print "<b>Cognome:</b> " . $rs->Fields ['cognome']->value;
        print "</p>";
        $rs->MoveNext();
    }

    // Chiudo il Recordset
    $rs->Close();
    $rs->Release();
    $rs = null;

    // Chiudo la Connection
    $cn->Close();
    $cn->Release();
    $cn = null;
?>

</body>
</html>
Il funzionamento è semplice: al Recordset passo la query in lettura e specifico la variabile in cui è stata aperta la connessione; la proprietà EOF dell'oggetto Recordset (End Of File) legge tutti i dati in funzione della query specificata; se settata su TRUE vuol dire che non ci sono dati nel database, quindi lancio il messaggio di notifica; se settata su FALSE all'interno di un ciclo, legge tutti i dati in funzione della query specificata; il metodo MoveNext() interrompe il ciclo e posizione il cursore di ADO all'inizio del ciclo, evitando un loop infinito.

Nella chiusura degli oggetto troviamo i metodi Close() e Release() che servono rispettivamente a chiudere l'oggetto ed a distruggere un COM. In fine si setta la variabile su null in modo da svuotare la memoria della variabile.

Scrittura dei dati

Il criterio con cui si scrivono dei dati su un database Access con PHP è simile al criterio di lettura dei dati; nel codice che segue, scritto nel file scrivi.php non utilizza il Recordset ma esegue una INSERT SQL grazie al metodo Execute() dell'oggetto Connection; il codice commentato:
<html>
    <head>
        <title>Interazione tra PHP ed Ms Access</title>
    </head>
<body>

<?PHP
    // Includo il file contenente la stringa di connessione
    include("connessione.php");

    $cn = new COM("ADODB.Connection");
    $cn->open($sc);

    // Effettuo l'inserimento dei dati
    $cn->Execute("INSERT INTO utenti (nome, cognome) VALUES ('Luca', 'Ruggiero')");

    // Lancio un messaggio di conferma
    print "<p>Inserimento effettuato con successo</p>";

    // Chiudo la Connection
    $cn->Close();
    $cn->Release();
    $cn = null;
?>

</body>
</html>

I più cliccati della sezione Php

:: Redirect in Php (102.453)

:: Upload di file in Php (33.233)

:: Refresh temporizzato in PHP (27.384)

:: Scrivere il codice di sicurezza CAPTCHA in Php (25.987)

:: Un carrello della spesa in PHP (22.676)

:: Creare un menu dinamico in Php (20.831)

:: Pagamenti online con PayPal e PHP (17.394)

:: Convertire una stringa in maiuscolo e in minuscolo in Php (15.772)

:: Inviare email in formato Html con Php (15.703)

:: Ottenere le dimensioni di un'immagine con PHP (15.020)

IN EVIDENZA
DOWNLOAD