PHP
HTML
CSS
JavaScript
Generatori
Varie & Old

PHP: PDO e prepared statements

PDO e prepared statements in PHP

L’estensione PDO (PHP Data Objects) permette di collegarsi a diversi database con un’unica interfaccia. Con i prepared statements possiamo eseguire query più sicure e prevenire attacchi di tipo SQL injection.

Introduzione

PDO è una libreria che consente di lavorare con diversi sistemi di database (MySQL, PostgreSQL, SQLite, ecc.) tramite la stessa interfaccia. Una caratteristica importante di PDO è la possibilità di usare i prepared statements, che separano la struttura della query dai valori da inserire. Questo riduce notevolmente il rischio di SQL injection e rende il codice più sicuro e leggibile.


Esempio di connessione con PDO

Per creare una connessione con PDO usiamo la classe PDO, passando i parametri di connessione (host, database, utente e password).

Codice Esempio: connessione PDO

CODE: PHPpreleva codice
  1. <?php
  2. try {
  3.   $conn = new PDO("mysql:host=localhost;dbname=scuola", "root", "");
  4.   // Imposto la modalità di errore
  5.   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.   echo "Connessione stabilita con successo.";
  7. } catch(PDOException $e) {
  8.   echo "Connessione fallita: " . $e->getMessage();
  9. }
  10. ?>
  11. <!-- Output:
  12. Connessione stabilita con successo.
  13. -->

Esempio di prepared statement per INSERT

In questo esempio usiamo un prepared statement per inserire un nuovo record nella tabella studenti. I valori vengono passati separatamente con il metodo bindParam().

Codice Esempio: prepared statement INSERT

CODE: PHPpreleva codice
  1. <?php
  2. try {
  3.   $conn = new PDO("mysql:host=localhost;dbname=scuola", "root", "");
  4.   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.  
  6.   $sql = "INSERT INTO studenti (nome, eta) VALUES (:nome, :eta)";
  7.   $stmt = $conn->prepare($sql);
  8.  
  9.   $nome = "Marco";
  10.   $eta = 21;
  11.  
  12.   $stmt->bindParam(':nome', $nome);
  13.   $stmt->bindParam(':eta', $eta);
  14.  
  15.   $stmt->execute();
  16.  
  17.   echo "Nuovo record inserito con successo.";
  18. } catch(PDOException $e) {
  19.   echo "Errore: " . $e->getMessage();
  20. }
  21. ?>
  22. <!-- Output:
  23. Nuovo record inserito con successo.
  24. -->

Esempio di prepared statement per SELECT

Con un prepared statement possiamo anche leggere dati, usando execute() e poi fetch() o fetchAll() per ottenere i risultati.

Codice Esempio: prepared statement SELECT

CODE: PHPpreleva codice
  1. <?php
  2. try {
  3.   $conn = new PDO("mysql:host=localhost;dbname=scuola", "root", "");
  4.   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.  
  6.   $sql = "SELECT id, nome, eta FROM studenti WHERE eta > :eta";
  7.   $stmt = $conn->prepare($sql);
  8.  
  9.   $eta_minima = 18;
  10.   $stmt->bindParam(':eta', $eta_minima);
  11.   $stmt->execute();
  12.  
  13.   $result = $stmt->fetchAll();
  14.  
  15.   foreach ($result as $row) {
  16.     echo "ID: " . $row["id"] . " - Nome: " . $row["nome"] . " - Età: " . $row["eta"] . "<br>";
  17.   }
  18. } catch(PDOException $e) {
  19.   echo "Errore: " . $e->getMessage();
  20. }
  21. ?>
  22. <!-- Output:
  23. ID: 1 - Nome: Marco - Età: 21
  24. ID: 2 - Nome: Anna - Età: 22
  25. -->

Tabella riassuntiva

Concetto Descrizione Uso
PDO Classe che permette la connessione a diversi tipi di database. Portabilità e gestione uniforme dei database.
prepare() Crea uno statement pronto da eseguire con parametri. Separare query e valori, migliorando la sicurezza.
bindParam() Associa variabili ai parametri della query. Impostare valori dinamici in modo sicuro.
execute() Esegue lo statement preparato. Inviare la query al database.

Considerazioni

L’uso di PDO con i prepared statements è una delle migliori pratiche in PHP per la gestione dei database. Permette di lavorare in modo uniforme su diversi sistemi e di proteggere le applicazioni da vulnerabilità comuni come la SQL injection. Ogni query dovrebbe preferibilmente essere preparata e parametrizzata.


I Cookie su questo sito:

Il nostro sito utilizza cookie e altre tecnologie in modo tale che sia noi, sia i nostri partner, possiamo ricordarci di te e capire come tu e gli altri visitatori utilizzate il nostro sito. Qui puoi trovare ulteriori informazioni sui cookie e le altre tecnologie. Chiudendo questo banner o continuando la navigazione acconsenti all'uso dei cookie. Acconsento Info Cookies