back to top

Selezione dei record con PHP e MySQLi

Ora che la tabella "agenda" del database "nuova_rubrica" presenta dei campi popolati con dei record, è possibile passare alla fase di estrazione dei dati con successiva stampa a video; per far questo l’applicazione basata su MySQLi proposta di seguito si occuperà di interrogare il Database Manager richiedendo l’esecuzione di una query basata sul comando SELECT.

Nel caso specifico dell’esempio mostrato di seguito verranno estratti tutti i dati fino ad ora memorizzati in tabella relativamente ai campi "nome" e "cognome", ciò avverrà però soltanto dopo aver verificato tramite un apposito controllo che quest’ultima presenti effettivamente dei record.

Sul modello dei codici sorgenti proposti in precedenza, anche questa volta le fasi necessarie per la connessione a MySQL e per la selezione del database coinvolto verranno effettuate attraverso il file "connessione.php" che verrà richiamato all’inizio dello script tramite un’inclusione.

<?php
/*
  selezione di dati da una tabella con MySQLi
*/
// inclusione del file di connessione
include "connessione.php";

// esecuzione della query per la selezione dei record
// query argomento del metodo query()
if (!$result = $connessione->query("SELECT nome,cognome FROM agenda")) {
  echo "Errore della query: " . $connessione->error . ".";
  exit();
}else{
  // conteggio dei record
  if($result->num_rows > 0) {
    // conteggio dei record restituiti dalla query
    while($row = $result->fetch_array(MYSQLI_ASSOC))
    {
      echo $row['nome'] ." ". $row['cognome'] . "<br />";
    }
    // liberazione delle risorse occupate dal risultato
    $result->close();
  }
}
// chiusura della connessione
$connessione->close();
?>

Come già accaduto in precedenza, anche nell’esempio appena mostrato l’istruzione per l’interrogazione al DBMS è stata passata come argomento al metodo query(); nel caso in cui tale operazione dovesse dare luogo a degli errori, allora il metodo error() consentirà di stampare a video una stringa descrittiva riguardante la natura dell’errore stesso.

Il verificarsi di un errore interromperà l’esecuzione dello script grazie alla funzione exit(), in caso contrario, cioè se la query dovesse essere eseguita correttamente, l’applicazione richiamerà il metodo num_rows() che avrà il compito di contare i record coinvolti da quest’ultima. Nel caso in cui il conteggio effettuato dovesse restituire un risultato superiore a zero:

if($result->num_rows > 0) { ...

allora si potrà passare alla fase di stampa dei dati estratti; essa sarà possibile tramite un ciclo while le cui iterazioni saranno pari al numero dei record selezionati tramite l’istruzione SQL.

Per ogni iterazione del ciclo verrà richiamato il metodo fetch_array(), esso è stato concepito per riportare un set di risultati sotto forma di array associativo, numerico o dotato di entrambe tali caratteristiche; a tal proposito è disponibile un apposito parametro sotto forma di costante in grado di definire quale tipo di array dovrà essere prodotto tramite l’esecuzione del metodo. Tale parametro potrà assumere tre diversi valori: MYSQLI_ASSOC (array associativo, come nel caso dell’esempio proposto), MYSQLI_NUM (array numerico) o MYSQLI_BOTH (entrambe le caratteristiche).

Il ciclo consentirà quindi di stampare uno per uno tutti i record estratti prelevandoli direttamente dall’array generato (nel nostro caso denominato "$row"), i valori restituiti a video saranno quelli corrispondenti alle chiavi associative utilizzate ($row[‘nome] e $row[‘cognome’]).

Fatto questo il metodo close() permetterà di liberare le risorse impiegate per la memorizzazione del risultato ottenuto e di interrompere la connessione a MySQL.

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.