back to top

Aggiornamento e cancellazione di record con MySQLi

Una volta inseriti dei record all’interno della tabella "agenda", le informazioni archiviate in essa potranno essere aggiornate (e quindi modificate) o cancellate. Per fare ciò faremo ricorso, rispettivamente, alle istruzioni SQL UPDATE e DELETE.

Modificare un record con MySQLi

A tal proposito, nel codice che verrà proposto di seguito saranno eseguite nell’ordine due operazioni distinte: la prima riguarderà appunto l’aggiornamento di alcuni dei dati precedentemente memorizzati, la seconda consisterà nell’estrazione del record coinvolto dall’UPDATE (ma potrebbero essere più di uno) tramite query SELECT e nella successiva stampa a video delle informazioni modificate:

<?php
/*
    upgrade di un record in una tabella con MySQLi
*/
// inclusione del file di connessione
include "connessione.php";

// esecuzione della query per l'aggiornamento dei record
if (!$connessione->query("UPDATE agenda SET nome='Lio' WHERE id=1")) {
  echo "Errore della query UPDATE: " . $connessione->error . ".";
  exit();
}else{
  // esecuzione della query per la selezione dei record
  // query argomento del metodo query()
  if (!$result = $connessione->query("SELECT nome,cognome FROM agenda WHERE id=1")) {
    echo "Errore della query: " . $connessione->error . ".";
    exit();
  }else{
    // conteggio dei record
    if($result->num_rows > 0) {
      // ciclo i 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();  
?>

Chiaramente, il primo passaggio da eseguire sarà quello relativo all’inclusione del file che contiene il codice necessario per la connessione al Database engine e la selezione del database ("config.php"); fatto questo si potrà lanciare immediatamente l’istruzione per l’aggiornamento del record che si desidera modificare:

"UPDATE agenda SET nome='Lio' WHERE id=1"

Tale istruzione verrà passata come argomento al metodo query() che si occuperà di eseguirla, nel caso in cui questa procedura dovesse dar luogo ad errori o comportamenti imprevisti, il metodo error() permetterà di visualizzare una notifica, prodotta da PHP stesso, indicante la natura dell’eccezione che dovrà essere gestita.

In presenza di errori, la funzione exit(), inserita come esito vincolante in caso di soddisfazione della condizione prevista nel costrutto di controllo if/else, impedirà che le istruzioni successive vengano eseguite.

Nel caso in cui l’UPDATE dovesse invece concludersi con successo, il metodo num_rows() si occuperà di verificare che i record coinvolti dall’aggiornamento siano in numero maggiore a zero; un risultato pari a uno o superiore permetterà di lanciare un ciclo while che, per ogni sua iterazione, consentirà di richiamare il metodo fetch_array() con cui prelevare l’array associativo ($row) contenente le informazioni da restituire a video.

Al metodo fetch_array() verrà passato un parametro associato al valore MYSQLI_ASSOC che, come indicato nel capitolo precedente, permetterà di definire quale tipo di array dovrà essere prodotto dall’esecuzione del metodo.

Una volta effettuate le operazioni richieste, il metodo close() consentirà di liberare le risorse occupate dal risultato della SELECT e di terminare la connessione al DBMS MySQL.

Cancellare un record con MySQLi

Come anticipato nell’analisi della libreria PDO, i dati di una tabella contenuta in un database possono essere cancellati tramite delle istruzioni SQL esattamente come possono esseri inseriti, estratti o modificati; anche in questo caso vale la pena ricordare che l’eliminazione di un record precedentemente archiviato rappresenta un’operazione definitiva, irreversibile: MySQL infatti non prevede un sistema per mantenere in memoria le informazioni rimosse.

Il comando SQL di riferimento per eseguire questo tipo di procedura è naturalmente DELETE FROM, ad esso andrà passato come argomento il nome della tabella coinvolta (nel caso del nostro esempio "agenda"), mentre la clausola WHERE permetterà di definire il record coinvolto o più record nel caso in cui si voglia procedere ad un maggior numero di cancellazioni.

<?php
/*
  cancellazione di un record da una tabella con MySQLi
*/
// inclusione del file di connessione
include "connessione.php";

// esecuzione della query per la selezione dei record
if (!$result = $connessione->query("DELETE FROM agenda WHERE id=1")) {
  echo "Errore della query: " . $connessione->error . ".";
  exit();
}

// liberazione della memoria dai risultati estratti
$result->close();  

// chiusura della connessione
$connessione->close();  
?>

Come per qualsiasi altra operazione a carico del DBMS, anche in questo caso la fase relativa alla connessione a MySQL e quella riguardante la selezione del database dovranno precedere qualsiasi altra istruzione; motivo per il quale il primo passaggio da eseguire sarà quello di includere il file "config.php" contenente il codice necessario a questo scopo.

Fatto ciò si potrà procedere con l’esecuzione dell’istruzione SQL che, nel caso specifico, verrà effettuata a carico del record associato all’identificatore univoco ("id") "1":

"DELETE FROM agenda WHERE id=1"

Tale istruzione verrà introdotta all’interno di una struttura di controllo if/else, quest’ultima in pratica prevede che nel caso in cui il comando lanciato non possa essere eseguito, a causa di un errore nella sintassi o di un malfunzionamento, il metodo error() dovrà occuparsi di inviare una breve segnalazione in grado di descrivere la natura della problematica eventualmente verificatasi. Il già citato metodo exit() consentirà poi all’applicazione di arrestarsi in modo che alla generazione di un errore non faccia seguito alcuna esecuzione successiva.

In assenza di errori, l’istruzione lanciata avrà avuto plausibilmente esito positivo, motivo per il quale si potrà procedere con la chiamata al metodo close() attraverso il quale liberare le risorse impegnate e terminare la connessione al Database engine.

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.