Il rilascio della versione PHP 5 inclusa una nuova estensione per l'accesso a database MySQL chiamato MySQL Improved , o MySQLi . MySQLi offre migliori prestazioni , una struttura orientata agli oggetti , il supporto per le istruzioni preparate e funzionalità aggiuntive sotto forma di transazioni di database . L'attuale estensione MySQL non sarà rafforzata , ad esempio per fornire supporto unicode , e alla fine sarà eliminata a partire dalla versione di PHP 6 . Object-Oriented Struttura
MySQLi fornisce un insieme di funzioni per una struttura di codice procedurale di stile per rendere la transizione più facile da MySQL . Tuttavia, fornisce anche la funzionalità mediante un insieme di classi orientate agli oggetti . Utilizzando uno stile orientato agli oggetti può rendere l'integrazione di MySQL adatta meglio con la versione PHP 5 caratteristiche object-oriented e spesso elimina la necessità di creare variabili supplementari per supportare le operazioni di MySQL e compiti . Ad esempio, il seguente mostra il codice per la connessione a un server di database e aprire un database sia in MySQL e MySQLi : MySQL : $ DBC = mysql_connect ( " localhost " , "utente" , " password") ; $ db = mysql_select_database ( "database" ) ;
mySQLi : $ db = new mysqli ( " localhost " , "utente" , "password " , "database" ) ;
Prepared Statements
Forse la più grande differenza tra MySQL e MySQLi è il supporto di MySQLi per le istruzioni preparate . Con MySQL , si deve prestare particolare attenzione per evitare ogni stringa utilizzata in una query per prevenire attacchi di tipo SQL injection . Con MySQLi e le istruzioni preparate , si associa un insieme di parametri a una query e impostare i parametri uguali per i diversi valori che si desidera utilizzare nella query . MySQLi prende cura di assicurarsi che tutto il codice sia correttamente escape prima di essere applicato al database. Ad esempio, il codice seguente inserisce due recrods in una tabella MySQL usando MySQLi :
$ stmt = $ db - > prepare ( " INSERT INTO PERSONE ( FullName , Email ) valori ( , ) ; $ ? ? sTMT > bind_param ( "ss" , $ fullname , $ email); $ fullname = " John Johnson " , $ email = " john@johnjohnson.com " ; $ stmt - > execute () ; $ fullname = " Mary Johnson " , $ email = " mary@johnjohnson.com " ; $ stmt - > execute (); $ stmt - > close ();
Efficiency miglioramenti
causa di dichiarazioni preparate e altri miglioramenti di efficienza , l'estensione MySQLi dovrebbero eseguire più velocemente di dichiarazioni MySQL equivalenti. Come si può vedere dall'esempio precedente utilizzando le istruzioni preparate , è necessario solo il sovraccarico di un inserto una volta , quando l'istruzione viene preparata . con un inserto MySQL equivalente , l'overhead dell'inserto si sarebbe ripetuto con ogni query di inserimento nel database.
Transazioni
MySQLi fornisce funzionalità aggiuntive in forma di operazioni . Con l'estensione MySQLi , si può racchiudere una serie di operazioni sui dati insieme in una transazione ed eseguire le operazioni insieme come una singola transazione. Se una operazione nella transazione fallisce , l'intera operazione non riesce e qualsiasi modifiche che sono state apportate vengono annullate. , ad esempio, si potrebbe utilizzare una transazione quando si programma un trasferimento di denaro tra due conti , perché a meno che entrambe le parti l'operazione riesce , l'operazione non è un successo , e non si vuole lasciare uno stato in cui un conto è stato addebitato , ma l'altro account non è stato accreditato .