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
Una delle interfacce applicative più ampiamente utilizzate è sicuramente quella
per il linguaggio C. 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 tre interfacce per PHP - mysql, mysqli e PDO - che verranno trattate in un capitolo successivo della guida.
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 il linguaggio C++ è disponibile un Connector ufficiale, compatibile anche con JDBC 4.0. Tuttavia è ancora utilizzabile un'ulteriore libreria, anch'essa molto diffusa: MySQL++. Prima della nascita del Connector, MySQL++ era la principale opzione per l'interazione tra il DBMS e i software in C++, tanto da essere supportata dagli stessi sviluppatori di MySQL
API Python
Anche per il linguaggio Python è stato previsto un apposito Connector che si è affiancato alla libreria di terze parti MySQLdb. Documentazione in merito può essere reperita sulla documentazione ufficiale di MySQL.
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.
ODBC
Il Connector/ODBC (precedentemente chiamato MyODBC) offre l'accesso a MySQL mediante lo standard industriale ODBC (Open DataBase Connectivity), disponibile per diverse piattaforme ma ampiamente usato nel sistema Windows. Un suo tipico utilizzo infatti consiste nell'accedere a database disponibili su macchine Unix/Linux da piattaforme Microsoft. Dopo aver installato il Connector/ODBC è necessario configurare un DSN (Data Source Name), a patto che la macchina client disponga dei necessari permessi di accesso al server. Dettagliate informazioni possono essere ricavate sempre dalla documentazione ufficiale.
.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 conforme a JDBC-3.0 e JDBC-4.0 (a seconda delle versioni), ed è di "Tipo 4", ossia è 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 mysql di 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.