Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


PHP Data Objects (PDO) - Connessione e gestione dati con database, Dispense di Programmazione Java

Una panoramica su PDO (PHP Data Objects), estensione di PHP per la connessione con un database (DBMS) come MySQL, PostgreSQL, Oracle, MSSQL, SQLite, ODBC, DB2, Firebird e altri. come gestire dati che risiedono su un database, come creare una connessione, costruire e eseguire query SQL, gestire i risultati e chiudere la connessione. Viene inoltre trattato il concetto di eccezioni e come utilizzare try-catch per gestire errori.

Tipologia: Dispense

2020/2021

Caricato il 05/06/2021

ziocaneeeeeee
ziocaneeeeeee 🇮🇹

1 documento

1 / 33

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
PDO
PHP Data Objects
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21

Anteprima parziale del testo

Scarica PHP Data Objects (PDO) - Connessione e gestione dati con database e più Dispense in PDF di Programmazione Java solo su Docsity!

PDO

PHP Data Objects

PDO (PHP Data Objects)

Estensione di PHP per la connessione con un

database (DBMS)

  • (^) p.es. MySQL, PostgreSQL, Oracle, MSSQL, SQLite,

ODBC,DB2, Firebird...

In precedenza c'erano solo librerie specifiche

per ciascun DBMS

  • (^) API diverse (p.e. nomi funzioni, argomenti diversi)
  • (^) Problemi di portabilità del codice in caso di utilizzo

di DBMS diverso

Connessione al Database

E’ necessario creare un oggetto PDO,

specificando come parametri:

Tipo di DBMS (es. MySQL)

Server che ospita il DBMS

  • (^) (localhost,127.0.0.1... in lab: lamp) ●

Nome del database

Credenziali dell’utente per il DBMS (username

e password)

Connessione al Database

Esempio: $pdo= new PDO ("mysql:host=lamp;dbname=cibo", "fabio", "miapass"); ● L’istruzione assegna a $pdo il riferimento ad un nuovo oggetto istanza della classe PDO che rappresenta la connessione con il DB …

  • (^) Il nome della variabile usata negli esempi a volte è
$conn o $db o $dbh

● Se ci sono problemi con la connessione viene sollevata una eccezione

Eccezioni

try – catch – finally

try { …. codice che può sollevare eccezioni ….}

catch (…) {… codice per gestire eccezione…}

finally { … codice sempre eseguito… } // opzionale

https://www.php.net/manual/en/language.exceptions.php

Catturare le eccezioni

try { $pdo= new PDO ("mysql:host=localhost;dbname=cibo", "fabio", "miapass"); // si usa il database .,, } catch (PDOException $e) { exit("Errore di connessione"); // durante sviluppo: echo $e->getMessage(); } Se non si cattura l'eccezione lo script termina stampando degli errori che potrebbero rivelare informazioni confidenziali (nome server, credenziali...)

Eseguire query di selezione

Il metodo query() di PDO consente di eseguire query SQL di

selezione (SELECT) ● (^) Restituisce un oggetto PDOStatement che rappresenta un resultset , l'insieme delle righe restituite dalla query SQL. $sql='SELECT * FROM studente'; $result=$pdo -> query($sql); ● In caso di errore restituisce false ATTENZIONE: exec() e query() non proteggono da attacchi di tipo SQL Injection (vedere più avanti). Usare solo con stringhe non dipendenti dall’utente. Vedere anche il metodo quote() di PDO

Accedere ai dati

● Sugli oggetti di tipo PDOStatement si può invocare il metodo fetch() che consente di prelevare la riga corrente del resultset e spostarsi alla successiva

  • (^) Se non esiste, viene restituito false (utile come test). ● Ogni riga può essere vista come un array associativo
  • (^) le chiavi corrispondono ai nomi delle colonne
  • (^) Più precisamente ai nomi degli attributi della tabella risultato es. SELECT lastname AS cognome …

Fetch mode

$result->fetch(PDO::FETCH_BOTH);
Array con chiavi numeriche e di tipo stringa (default)

Array ( [nome] => mela [0] => mela [colore] => rosso [1] => rosso ) ●

PDO::FETCH_NUM // numeric keys only

PDO::FETCH_ASSOC // string keys only

PDO – altro

// connessioni persistenti $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // gestione errori $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // utile in fase di sviluppo e debugging Altri valori PDO::ERRMODE_SILENT (default) PDO::ERRMODE_WARNING

SQL injection

● Tipo molto diffuso di attacco ad applicazioni web ● "Iniezione" di codice SQL utilizzando i parametri degli script ● Può permettere di aggirare i controlli di autenticazione ed autorizzazione o di eseguire query arbitrarie. ● Si contrasta controllando i dati ricevuti dall'utente ed adottando 'buone pratiche' di programmazione

SQL injection - esempio

Username:

Password:

SQL injection - esempio

$sql = "SELECT * FROM users WHERE user='".$_POST['user'] ."' AND pwd='".$_POST['pwd']."'"; Che succede se $_POST['pwd'] = “p' OR user LIKE 'admin%“ ?? SELECT * FROM users WHERE user=... AND pwd='p' OR user LIKE 'admin%' … si entra come amministratori!!!

https://xkcd.com/327/ https://stackoverflow.com/questions/332365/ https://bobby-tables.com/