Passiamo ora alla definizione e creazione dei metodi di scrittura nel nostro database. Partiamo dall'inserimento di un record.
function crea(){
$sql = "INSERT INTO " . $this->nome_tabella . "
SET nome=:nome, prezzo=:prezzo, descrizione=:descrizione, categoria_id=:categoria_id, data_insert=:data_insert";
$stmt = $this->conn->prepare($sql);
$this->nome = htmlspecialchars(strip_tags($this->nome));
$this->prezzo = htmlspecialchars(strip_tags($this->prezzo));
$this->descrizione = htmlspecialchars(strip_tags($this->descrizione));
$this->categoria_id = htmlspecialchars(strip_tags($this->categoria_id));
$this->data_insert = htmlspecialchars(strip_tags($this->data_insert));
$stmt->bindParam(":nome", $this->nome,PDO::PARAM_STR);
$stmt->bindParam(":prezzo", $this->prezzo,PDO::PARAM_STR);
$stmt->bindParam(":descrizione", $this->descrizione,PDO::PARAM_STR);
$stmt->bindParam(":categoria_id", $this->categoria_id,PDO::PARAM_INT);
$stmt->bindParam(":data_insert", $this->data_insert,PDO::PARAM_STR);
if($stmt->execute()){
return true;
}
return false;
}
Possiamo individuare una serie di passaggi: definizione della query d'inserimento con l'utilizzo dei parametri nominali e preparazione della query, sanificazione delle proprietà dell'oggetto che verranno assegnate ai parametri, in particolare con la conversione dei caratteri speciali in entità HTML e rimozione di eventuali tag HTML dalle stringhe.
Abbiamo poi l'assegnazione dei valori delle variabili ai parametri con dichiarazione del tipo di dato per incrementare la sicurezza della query. In ultimo eseguiamo la query e restituiamo un valore true
se l'operazione va a buon fine, altrimenti false
.
Definito il metodo d'inserimento l'aggiornamento non presenta particolari complicazioni e segue lo stesso schema visto precedentemente:
function aggiorna(){
$sql = "UPDATE
" . $this->nome_tabella . "
SET
nome = :nome,
prezzo = :prezzo,
descrizione = :descrizione,
categoria_id = :categoria_id
WHERE
id = :id";
$stmt = $this->conn->prepare($sql);
$this->nome = htmlspecialchars(strip_tags($this->nome));
$this->prezzo = htmlspecialchars(strip_tags($this->prezzo));
$this->descrizione = htmlspecialchars(strip_tags($this->descrizione));
$this->categoria_id = htmlspecialchars(strip_tags($this->categoria_id));
$this->id = htmlspecialchars(strip_tags($this->id));
$stmt->bindParam(':nome', $this->nome,PDO::PARAM_STR);
$stmt->bindParam(':prezzo', $this->prezzo,PDO::PARAM_STR);
$stmt->bindParam(':descrizione', $this->descrizione,PDO::PARAM_STR);
$stmt->bindParam(':categoria_id', $this->categoria_id,PDO::PARAM_INT);
$stmt->bindParam(':id', $this->id,PDO::PARAM_INT);
if($stmt->execute()){
return true;
}
return false;
}
Le variazioni sono minime e riguardano per lo più i dati: non abbiamo la scrittura della data d'inserimento mentre abbiamo l'id per selezionare il record che vogliamo aggiornare.
L'ultimo metodo che manca all'appello riguarda la cancellazione di un record:
function delete(){
$sql = "DELETE FROM " . $this->nome_tabella . " WHERE id = ?";
$stmt = $this->conn->prepare($sql);
$this->id = filter_var($this->id,FILTER_SANITIZE_NUMBER_INT);
$stmt->bindParam(1, $this->id,PDO::PARAM_INT);
if($stmt->execute()){
return true;
}
return false;
}
Anche in questo l'unica variante riguarda la proposta di un metodo diverso di sanificazione della variabile, tramite filter_var