L'estensione MySQLi (MySQL improveded) è stata messa a disposizione di PHP per sfruttare alcune nuove funzionalità messe a disposizione dalle versioni di MySQL 4.1.3 e successive ed è disponibile per PHP 5 e release superiori.
MySQLi fornisce nuovi strumento per lo sviluppatore che desidera realizzare applicazioni in grado di interfacciarci con questo RDBMS:
Le funzionalità messe a disposizione da MySQLi possono essere utilizzate sia all'interno di un contesto procedurale che in un'applicazione sviluppata utilizzando l'approccio per oggetti; infatti, per la maggior parte delle funzioni disponibili tramite questa estensione esiste un metodo corrispondente, ad esempio: la funzione mysqli_fetch_array() (molto simile alla funzione mysql_fetch_array()) messa a disposizione dall'estensione MySQL) corrisponde al metodo mysqli_result::fetch_array. Per gli esempi di questa trattazione verrà privilegiato l'approccio OOP.
Utilizzando il paradigma per oggetti in MySQLi, la connessione al DBMS avviene per istanza, come nell'esempio seguente:
// connessione a MySQL con l'estensione MySQLi
$ mysqli = new mysqli("localhost", "username", "password", "nome_database");
Nel codice proposto viene effettuata un'istanza dell'oggetto $mysqli appartenente alla classe "mysqli", si noti come al costruttore non venga passato lo stesso numero di parametri necessari per la funzione mysql_connect(), cioè nome di host, nome utente, password utente, ad essi si aggiunge infatti il parametro relativo al nome del database predefinito per l'applicazione, non ci sarà quindi bisogno di una funzione come mysql_select_db().
Si veda ora il seguente esempio pratico applicato sul database mioblog:
<?php
// connessione a MySQL con l'estensione MySQLi
$mysqli = new mysqli("localhost", "username", "password", "mioblog");
// verifica dell'avvenuta connessione
if (mysqli_connect_errno()) {
// notifica in caso di errore
echo "Errore in connessione al DBMS: ".mysqli_connect_error();
// interruzione delle esecuzioni i caso di errore
exit();
}
else {
// notifica in caso di connessione attiva
echo "Connessione avvenuta con successo";
}
// chiusura della connessione
$mysqli->close();
?>
mysqli_connect_errno() è una funzione che restituisce il numero identificativo di un eventuale errore prodotto durante un tentativo di connessione, nell'esempio proposto, se la funzione restituisce un valore significa che l'ultima connessione tentata è andata fallita, sarà quindi necessario bloccare l'esecuzione del codice seguente tramite la funzione exit(), nello stesso modo la funzione mysqli_connect_error() permetterà di visualizzare l'errore prodotto in connessione; diversamente, stabilita la connessione, questa potrà essere chiusa utilizzando il metodo close(), quest'ultimo non è da utilizzare obbligatoriamente ma ne è consigliabile l'impiego per le stesse motivazioni espresse in precedenza a proposito della funzione mysql_close().
Per effettuare un'interrogazione tramite l'estensione MySQLi è possibile utilizzare un metodo apposito denominato query(), il metodo accetta come argomento la query SQL che si desidera lanciare al Database server.
Si veda il seguente esempio:
# estrarre risultati con il metodo mysqli_result::fetch_array
// query argomento del metodo query()
$query = " SELECT titolo_post FROM post ORDER BY data_post DESC ";
// esecuzione della query
$result = $mysqli->query($query);
// conteggio dei record restituiti dalla query
if($result->num_rows >0)
{
// generazione di un array numerico
while($row = $result->fetch_array(MYSQLI_NUM))
{
echo $row[0];
echo "<br />\n";
}
}
// liberazione delle risorse occupate dal risultato
$result->close();
Il metodo mysqli_result::fetch_array genera un array dal risultato di un'interrogazione passato come argomento al metodo query(), questo array potrà essere di tre tipi: numerico, associativo o di entrambi i tipi precedenti; nell'esempio appena esposto il metodo produce un array di tipo numerico grazie all'argomento MYSQLI_NUM, quindi verranno associati degli indici numerici ai diversi valori dei record risultanti dalla query.
L'esempio successivo, mostra come ottenere lo stesso risultato del codice precedente generando un array associativo grazie al quale i diversi record avranno come indice il nome dei campi, il tutto è possibile utilizzando l'argomento MYSQLI_ASSOC in luogo di MYSQLI_NUM:
# generazione di un array associativo
while($row2 = $result->fetch_array(MYSQLI_ASSOC))
{
echo $row['titolo_post'];
echo "<br />\n";
}
MySQL_BOTH permette invece di utilizzare sia gli indici numerici che quelli associativi; si noti l'utilizzo del metodo mysqli_result::num_row che restituisce il numero di record restituiti da una query.
MySQLi si presenta come una valida alternativa all'estensione MySQL, soprattutto per quanto riguarda le applicazioni che dovranno essere fruite da un alto numero di utenti, si tratta però di un'estensione ancora incompleta che al momento non è dato sapere se verrà supportata sufficientemente in futuro, per cui conoscere le funzioni disponibili grazie all'estensione MySQL rimane fondamentale.
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |