

























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
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
1 / 33
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!


























●
●
●
●
●
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 …
● Se ci sono problemi con la connessione viene sollevata una eccezione
https://www.php.net/manual/en/language.exceptions.php
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...)
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
● Sugli oggetti di tipo PDOStatement si può invocare il metodo fetch() che consente di prelevare la riga corrente del resultset e spostarsi alla successiva
●
Array ( [nome] => mela [0] => mela [colore] => rosso [1] => rosso ) ●
●
// 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
● 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 = "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/