Una dichiarazione preparata è una funzionalità utilizzata per eseguire ripetutamente le stesse (o simili) istruzioni SQL con elevata efficienza.
Le dichiarazioni preparate funzionano fondamentalmente in questo modo:
Rispetto all'esecuzione diretta di dichiarazioni SQL, le dichiarazioni preparate presentano tre vantaggi principali:
Dichiarazioni preparate in MySQLi
L'esempio seguente utilizza dichiarazioni preparate e parametri associati in MySQLi:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mioDB";
// Crea connessione
$conn = new mysqli($servername, $username, $password, $dbname);
// Controlla connessione
if ($conn->connect_error) {
die("Connessione fallita: " . $conn->connect_error);
}
// prepara e vincola
$stmt = $conn->prepare("INSERT INTO Ospiti (nome, cognome, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $nome, $cognome, $email);
// imposta i parametri ed esegui
$nome = "Mario";
$cognome = "Rossi";
$email = "mario@esempio.it";
$stmt->execute();
$nome = "Maria";
$cognome = "bianchi";
$email = "maria@esempio.it";
$stmt->execute();
$nome = "Giovanni";
$cognome = "Verdi";
$email = "giovanni@esempio.it";
$stmt->execute();
echo "Nuovi record creati con successo";
$stmt->close();
$conn->close();
?>
Spiegazione del codice precedente:
INSERT INTO Ospiti (nome, cognome, email) VALUES (?, ?, ?)"
Nel nostro codice SQL, inseriamo un punto interrogativo (?) come sostituto del valore intero, stringa, double o blob che vogliamo inserire.
Ora guardiamo la funzione bind_param():
$stmt->bind_param("sss", $nome, $cognome, $email);
Questa funzione associa i parametri alla query SQL e indica al database quali sono i parametri. L'argomento "sss" definisce i tipi di dati dei parametri. Il carattere s dice a mysql che il parametro è una stringa.
L'argomento può essere di quattro tipi:
Deve essere specificato uno di questi argomenti per ogni parametro.
Dicendo a mysql che tipo di dati aspettarsi, riduciamo al minimo il rischio di SQL injection.
Nota: se vogliamo inserire dati da fonti esterne (come l'input dell'utente), è molto importante che i dati siano sanificati e convalidati.
Dichiarazioni preparate in PDO
L'esempio seguente utilizza dichiarazioni preparate e parametri associati in PDO:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mioDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// imposta la modalità errore di PDO in exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// prepara sql e vincoal i parametri
$stmt = $conn->prepare("INSERT INTO Ospiti (nome, cognome, email)
VALUES (:nome, :cognome, :email)");
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':cognome', $cognome);
$stmt->bindParam(':email', $email);
// inserisci una riga
$nome = "Mario";
$cognome = "Rossi";
$email = "mario@esempio.it";
$stmt->execute();
// inserisci un'altra riga
$nome = "Maria";
$cognome = "Bianchi";
$email = "maria@esempio.it";
$stmt->execute();
// inserisci un'altra riga
$nome = "Giovanni";
$cognome = "Verdi";
$email = "giovanni@esempio.it";
$stmt->execute();
echo "Nuovi record creati con successo";
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
Contattami se hai bisogno di uno sviluppatore PHP per il tuo progetto o la tua azienda