API e connettori

Un database server ovviamente non sarà utilizzato soltanto attraverso i suoi client, ma deve essere raggiungibile da applicazioni di vario genere. L’utilizzo più diffuso di MySQL è probabilmente quello di database per i siti e le applicazioni web; tuttavia è dotato di numerose interfacce applicative e connettori che lo rendono utilizzabile praticamente in qualsiasi contesto.

Cominceremo con una rapida carreggiata delle API, rimandandovi come al solito al manuale per una documentazione più dettagliata.

libmysqld (Embedded MySQL Server Library)

Una prima possibilità è quella di incorporare direttamente il server MySQL nell’applicazione. Ciò è possibile attraverso l’uso dell’apposita libreria libmysqld, ottenibile configurando MySQL con l’opzione –with-embedded-server (in fase di compilazione dei sorgenti). L’uso di questa libreria consente di ottenere una maggior velocità di esecuzione.

API C

L’interfaccia applicativa più ampiamente utilizzata è sicuramente quella per il linguaggio C, sviluppata direttamente da MySQL AB. Si trova nella libreria mysqlclient. La maggior parte dei programmi client distribuiti con MySQL è scritta in C, quindi utilizza questa libreria per connettersi al server. Anche le altre API usano mysqlclient. Questa interfaccia consente l’utilizzo delle prepared statements (vedere oltre) e supporta anche l’esecuzione di query multiple (non con le prepared statements però).

API PHP

PHP è uno dei principali “compagni di viaggio” di MySQL, essendo un linguaggio diffusissimo per applicazioni e siti web dinamici. Esistono due interfacce per PHP:

  • mysql: disponibile per PHP 4 e 5, è l’interfaccia da utilizzare per le versioni di MySQL precedenti alla 4.1. Come abbiamo visto più volte, MySQL 4.1 ha introdotto numerose novità che non sono supportate da questa libreria.
  • mysqli: significa “MySQL Improved” (migliorato) ed è l’interfaccia da utilizzare per le versioni di MySQL dalla 4.1 in poi. È disponibile solo per PHP 5. Supporta le prepared statements, le istruzioni multiple, e ha un’interfaccia avanzata object-oriented.

Attenzione: se si utilizza la vecchia interfaccia con le ultime versioni di MySQL (4.1 o successiva) è indispensabile che il server funzioni con l’opzione –old-passwords.

API Perl

Per l’interfacciamento con Perl esiste l’interfaccia Perl DBI, basata sul modulo DBI (interfaccia generica verso i database) e sul driver DBD::mysql.
Questa interfaccia sostituisce la vecchia mysqlperl, da considerare ormai obsoleta.

API C++

Per C++ esiste MySQL++. Potete trovare la documentazione relativa a questo indirizzo.

API Python

L’interfaccia per Python è MySQLdb, disponibile a questo indirizzo.

API Tcl

Anche per Tcl è disponibile una semplice interfaccia chiamata MySQLtcl. La trovate a questo indirizzo.

API Eiffel

Per il linguaggio Eiffel potete trovare l’interfaccia Eiffel MySQL a questo indirizzo.

Passiamo ora ad una rassegna dei connettori, sempre rimandando al manuale per maggiori informazioni.

ODBC

Il primo gruppo di connettori di cui parliamo sono i driver MyODBC. Si tratta di prodotti utilizzabili dalle applicazioni che utilizzano ODBC (Open DataBase Connectivity), una delle più note API generalizzate per l’accesso ai database. La versione più recente è MyODBC 3.51, che supporta le specifiche ODBC 3.5x di livello 1, con funzionalità di livello 2; la versione precedente, MyODBC 2.50, è basata sulle specifiche ODBC 2.50 di livello 0 (con funzionalità di livello 1 e 2). MyODBC è utilizzabile su piattaforme Windows e Unix, sebbene il suo utilizzo sia ampiamente prevalente su Windows.

Una volta installato MyODBC, è sufficiente configurare i DSN (Data Source Name) necessari all’applicazione per consentire a quest’ultima di accedere a MySQL, purchè la macchina da cui avvengono le connessioni abbia i necessari permessi sulle tabelle del server. È possibile anche impostare alcuni parametri che influenzano le risposte di MySQL alle connessioni.

.NET

Per le applicazioni .NET è disponibile MySQL Connector/NET, un driver ADO.NET scritto in C#. Supporta tutte le novità introdotte da MySQL 4.1 in poi (stored procedures, prepared statements ecc.)

Java

Per le applicazioni Java, che utilizzano i driver JDBC, MySQL fornisce connettività attraverso MySQL Connector/J. Si tratta di driver JDBC-3.0 di “Tipo 4″, che significa che è scritto in Java e comunica direttamente col server attraverso il protocollo MySQL.

Prepared statements

Facciamo un rapido accenno anche alle prepared statements, che abbiamo citato poco fa e che sono uno strumento molto utile per l’utilizzo del database da parte delle applicazioni; si tratta di una delle tante novità introdotte da MySQL nella versione 4.1.

Le prepared statements sono un modo di eseguire le istruzioni SQL dichiarando prima al server la sintassi della query con dei “segnaposto” per i valori che l’istruzione riceverà di volta in volta; di seguito l’istruzione viene eseguita inviando al server solo i valori di cui sopra. Questo modo di lavorare offre notevoli vantaggi nel caso in cui una istruzione debba essere eseguita più volte con valori diversi: infatti il parsing della query avverrà una volta sola e ciò comporta una maggiore velocità; inoltre anche la quantità di dati che viaggiano di volta in volta dal client al server risulterà minore in questo caso.

Un altro vantaggio delle prepared statements è che offrono protezione dalle SQL injection, in quanto ogni segnaposto sarà sostituito sempre da un valore e non c’è quindi la possibilità che l’introduzione di valori “maligni” alteri la struttura della query.

Le prepared statements sono concepite per essere utilizzate con le interfacce applicative, ma esiste anche la possibilità di utilizzarle direttamente con il linguaggio SQL: ciò può essere utile qualora si vogliano fare delle verifiche sul loro funzionamento oppure non si disponga di un’interfaccia applicativa che le supporta (ad es. la vecchia estensione mysqldi PHP).

Vediamo alcuni semplicissimi esempi:

PREPARE stmt1 FROM ‘SELECT * FROM tabella1 WHERE campo1 = ? AND campo2 = ?’;
SET @a=5;
SET @b=’ora’;
EXECUTE stmt1 USING @a, @b;
SET @a=8;
EXECUTE stmt1 USING @a, @b;

Con la prima istruzione prepariamo la query che dovrà estrarre i dati da tabella1 in base al valore delle colonne campo1 e campo2; utilizziamo il segnaposto (il punto interrogativo) per indicare che quelli saranno i valori variabili della query. Quando eseguiremo l’istruzione quindi, alla quale abbiamo dato il nome ‘stmt1′, dovremo passare tali valori.

Con la seconda istruzione assegniamo il valore 5 alla variabile @a e il valore ‘ora’ alla variabile @b quindi eseguiamo l’istruzione che avevamo preparato in precedenza, passando tali valori che verranno sostituiti ai punti interrogativi nella query. Dopo la prima esecuzione, modifichiamo il valore di @a ed eseguiamo nuovamente la query (il valore di @b è rimasto invariato).

Naturalmente è anche possibile preparare istruzioni senza alcun parametro: in questo caso potremo richiamarle omettendo la clausola USING. Le istruzioni che è possibile preparare sono CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE e la maggior parte delle SHOW.

Both comments and pings are currently closed.

Comments are closed.