Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

L'estensione MySQLi per l'interazione tra PHP e MYSQL

Articolo scritto da Claudio Garau
Pagina 5 di 5

5. Estrazione dei record

Una volta eseguita una query, tramite l'estensione MySQLi è possibile utilizzare alcune funzioni appositamente dedicate all'estrazione dei record; in questa parte della trattazione verrà presa in analisi la funzione mysqli_fetch_array() che consente di visualizzare tutti i record coinvolti da una determinata interrogazione; tale funzione, molto simile alla corrispondente mysql_fetch_array() dell'estensione MySQL, produce un array accettando come parametro il risultato di una query; questo array può essere di diverso tipo sulla base del secondo parametro passato a mysqli_fetch_array():

Il seguente esempio permette di analizzare l'utilizzo della funzione mysqli_fetch_array() all'interno di un contesto procedurale.
<?php
// estrazione dei dati con mysqli_fetch_array()

// connessione al database
$link = @mysqli_connect("localhost", "username", "password", "data");

// controllo sullo stato della connessione
if (mysqli_connect_errno())
{
  echo "Connessione fallita: " . die (mysqli_connect_error());
}

// esecuzione della query
$query = "SELECT nome FROM prova ORDER by id DESC";
$result = @mysqli_query($link, $query);

// controllo sul numero dei record coinvolti
if(@mysqli_num_rows($result)!=0)
{
  // risultato sotto forma di array numerico
  while($row = mysqli_fetch_array($result, MYSQLI_NUM))
  {
    echo $row[0] . "<br>";
  }

  // risultato sotto forma di array asscociativo
  while($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
  {
    echo $row['nome'] . "<br>";
  }

  // risultato sotto forma di array numerico o associativo
  while($row = mysqli_fetch_array($result, MYSQLI_BOTH))
  {
    echo $row['nome'] . "<br>";
    echo $row[0] . "<br>";
  }
}

// liberazione della memoria dal risultato della query
@mysqli_free_result($result);

// chiusura della connessione
@mysqli_close($link);
?>
I valori presenti all'interno di un array prodotto tramite mysqli_fetch_array() potrà essere sviluppato attraverso un ciclo; nel caso in cui il flag associato come parametro alla funzione si MYSQLI_NUM, verrà prodotto un array di tipo numerico in cui i valori presenti all'interno del vettore saranno indicizzati da "0" a "n", dove "n" è l'ultimo numero indice dell'array; nell'esempio proposto viene effettuata un'interrogazione che coinvolge un solo campo, quindi l'unico indice disponibile sarà "0".

Nel caso in cui invece il secondo argomento della funzione sia MYSQLI_ASSOC, verrà prodotto un array associativo in cui i valori verranno indicizzati tramite il nome dei campi coinvolti dalla query; nel caso dell'esempio proposto, vengono estratti unicamente i valori relativi al campo "nome" della tabella "prova", per cui l'unico indice presente nell'array associativo sarà appunto "nome".

(L'articolo continua più sotto...)

MYSQLI_BOTH ("both" significa appunto in lingua Inglese "entrambi"), produce un array numerico e associativo, quindi sarà possibile sia riferirsi agli indici da "0" a "n" che a quelli che hanno come nome il nome dei campi che forniscono i record tramite query.

Naturalmente, anche per la funzione mysqli_fetch array() esiste un metodo corrispondente denominato mysqli_result::fetch_array; il codice seguente mostra un esempio dell'utilizzo di questo metodo all'interno di un contesto orientato agli oggetti:

<?php
// estrazione dei dati con il metodo mysqli_result::fetch_array

// connessione al database per istanza
$mysqli = @new mysqli("localhost", "username", "password", "data");

// controllo sullo stato della connessione
if (mysqli_connect_errno())
{
  echo "Connessione fallita: " . die (mysqli_connect_error());
}

// esecuzione della query
$query = "SELECT nome FROM prova ORDER by id DESC";
$result = @$mysqli->query($query);

// controllo sul numero dei record coinvolti
if(@$result->num_rows > 0)
{
  // risultato sotto forma di array numerico
  while($row = $result->fetch_array(MYSQLI_NUM))
  {
    echo $row[0] . "<br>";
  }

  // risultato sotto forma di array asscociativo
  while($row = $result->fetch_array(MYSQLI_ASSOC))
  {
    echo $row['nome'] . "<br>";
  }

  // risultato sotto forma di array numerico o associativo
  while($row = $result->fetch_array(MYSQLI_BOTH))
  {
    echo $row['nome'] . "<br>";
    echo $row[0] . "<br>";
  }
}

// liberazione della memoria dal risultato della query
@$result->close();

// chiusura della connessione
@$mysqli->close();
?>
A livello funzionale, la differenza tra l'approccio procedurale e quello orientato agli oggetti è veramente molto sottile; in questo secondo caso la connessione avviene per istanza, a questo punto sarà possibile sottoporre la query al metodo mysqli::query e passarla come parametro al metodo mysqli_result::fetch_array che, sottoposto a ciclo while, mostrerà i risultati come valori di array di tipo diverso (numerici o associativi) a seconda del flag passato come secondo argomento alla funzione.

Nel primo esempio è stato effettuato un controllo sul numero dei record coinvolti dalla query utilizzando la funzione mysqli_num_rows(), a questa funzione corrisponde un metodo, denominato mysqli_result->num_rows, che potrà essere utilizzato in applicazioni la cui costruzione segue il paradigma object oriented, come nel secondo esempio proposto.

Corsi
Corso LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. A partire da 49 €.
Vedi anche...
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122