SlideShare a Scribd company logo
1 of 13
Download to read offline
Corso di Basi di Dati e Laboratorio




                          PHP DB
               Alfio Ferrara – Stefano Montanelli




  17/01/2006                Basi di Dati e Laboratorio   1




PHP e DBMS – 1

• L’uso dei DBMS con PHP si basa su alcuni
  semplici elementi fondamentali
   – Funzioni di connessione ai database e handle
     di connessione
   – Funzioni per inviare comandi SQL ai database
   – Funzioni per scorrere i risultati delle query




 A.A. 2005/2006             Basi di Dati e Laboratorio   2




PHP e DBMS – 2

• Sono disponibili librerie di astrazione sui
  DBMS che permettono (entro limiti
  dipendenti dall’implementazione) di
  scrivere codice indipendente dal DBMS
  utilizzato. (vedi Pear)




 A.A. 2005/2006             Basi di Dati e Laboratorio   3




                                                             1
MySQL

• Connessioni ad un database MySQL
   –   mysql_connect (semplice)
   –   mysql_pconnect (persistente)
   –   mysql_select_db
   –   mysql_query
   –   mysql_fetch_array
   –   mysql_free_result
   –   mysql_close




 A.A. 2005/2006          Basi di Dati e Laboratorio     4




MySQL – Connessione – 1

• 2 tipi di connessione
   – Semplice
         • Viene chiusa alla terminazione dello script o tramite
           l’istruzione mysql_close()
   – Persistente
         • Utilizza, se presente, una connessione
           precedentemente stabilita
         • Non viene chiusa alla terminazione dello script
         • Non viene chiusa dalla funzione mysql_close()




 A.A. 2005/2006          Basi di Dati e Laboratorio     5




MySQL – Connessione – 2

• Esempi di connessione
• Sintassi
        resource mysql_connect ([string server
           [, string username[, string password
           [, bool new_link[, int client_flags]]]]])

     – Es.
        $db = mysql_connect
              (‘localhost’, ‘dbuser’, ‘dbpassword’);
     – L’handle ottenuto ($db) verrà utilizzato per le
       successive chiamate per indicare la connessione
       sulla quale si desidera operare.


 A.A. 2005/2006          Basi di Dati e Laboratorio     6




                                                                   2
MySQL – Connessione – 3

• Dopo aver stabilito la connessione, occorre
  selezionare il database su cui si desidera
  operare

       bool mysql_select_db (string database_name
                          [, resource link_identifier])


       mysql_select_db(‘mydb’, $db)




 A.A. 2005/2006      Basi di Dati e Laboratorio   7




MySQL – Interazione

• Tramite il comando mysql_query() è
  possibile mandare comandi SQL al
  database. Questo permette di
   – Inserire dati
   – Modificare dati
   – Cancellare dati

  resource mysql_query (string query
                       [, resource link_identifier])




 A.A. 2005/2006      Basi di Dati e Laboratorio   8




MySQL – Select – 1
• Per selezionare i dati da una tabella si invia al
  server l’opportuna query SQL
• Si riceverà un handle che identifica il risultato
  ottenuto
• Tramite l’handle sarà possibile scorrere i risultati
  restituiti dal database
• Per sapere quante sono le tuple interessate dal
  comando SQL si utilizzano le funzioni
  mysql_num_rows() per SELECT e
  mysql_affected_rows() per INSERT, DELETE e
  UPDATE


 A.A. 2005/2006      Basi di Dati e Laboratorio   9




                                                          3
MySQL – Select – 2

• Esempio
   $query = ‘SELECT * FROM mytable’;
   $res = mysql_query($query, $db);
   if ($res){
   echo ‘Trovati ‘.mysql_num_rows($res).’ record’;
   }




 A.A. 2005/2006         Basi di Dati e Laboratorio        10




Gestione dei risultati – 1

• E’ possibile farsi restituire i risultati di una
  SELECT come un array
• Funzione mysql_fetch_array
  array mysql_fetch_array (resource result
                                [, int result_type])

• result_type è uno a scelta fra
   – MYSQL_ASSOC
   – MYSQL_NUM
   – MYSQL_BOTH (default)


 A.A. 2005/2006         Basi di Dati e Laboratorio        11




Gestione dei risultati – 2

• Esempio                                        MYTABLE
                                                ID   TITLE
                                              value1 value2
   – MYSQL_BOTH
   $row = array([0] => array(
                                [0] => “value1”,
                    MYSQL_NUM
                                [1] => “value2”,
                                [‘ID’] => “value1”,
                  MYSQL_ASSOC
                                [‘TITLE’] => “value2”
                              ))

 A.A. 2005/2006         Basi di Dati e Laboratorio        12




                                                               4
Gestione dei risultati – 3

• Esempio
  while ($row = mysql_fetch_array($res, MYSQL_ASSOC))
  {
      printf (quot;ID: %s Title: %squot;, $row[‘id’],
                                  $row[‘title’]);
  }




 A.A. 2005/2006          Basi di Dati e Laboratorio     13




PostgreSQL

• Connessioni ad un database PostgreSQL
   –   pg_connect (semplice)
   –   pg_pconnect (persistente)
   –   pg_query
   –   pg_fetch_array
   –   pg_free_result
   –   pg_close




 A.A. 2005/2006          Basi di Dati e Laboratorio     14




PostgreSQL – Connessione – 1

• 2 tipi di connessione
   – Semplice
         • Viene chiusa alla terminazione dello script o tramite
           l’istruzione pg_close()
   – Persistente
         • Utilizza, se presente, una connessione
           precedentemente stabilita
         • Non viene chiusa alla terminazione dello script
         • Non viene chiusa dalla funzione pg_close()




 A.A. 2005/2006          Basi di Dati e Laboratorio     15




                                                                   5
PostgreSQL – Connessione – 2

• Esempi di connessione
• Sintassi
        resource pg_connect (string connection_string
           [, int connection_type])
     – La stringa di connessione può essere una
       composizione variabile dei seguenti elementi:
        host=<nomehost>
        port=<numeroporta>
        dbname=<nomedb>
        user=<username>
        password=<password>
     – Il parametro connection_type viene usato per forzare
       esplicitamente una nuova connessione

 A.A. 2005/2006         Basi di Dati e Laboratorio     16




PostgreSQL – Connessione – 3

   ES.
    $db = pg_connect (“host=localhost
      user=test password=hackme
      dbname=testdb”);


   – I diversi parametri hanno tutti un valore di
     default. Trovate il valore per ognuno.
   – L’handle ottenuto ($db) verrà utilizzato per le
     successive chiamate per indicare la
     connessione sulla quale si desidera operare


 A.A. 2005/2006         Basi di Dati e Laboratorio     17




PostgreSQL – Interazione

• Tramite il comando pg_query() è possibile
  mandare comandi SQL al database
  Questo permette di
   – Inserire dati
   – Modificare dati
   – Cancellare dati

  resource pg_query (resource connection, string
  query)




 A.A. 2005/2006         Basi di Dati e Laboratorio     18




                                                              6
PostgreSQL – Select – 1
• Per selezionare i dati da una tabella si invia al
  server l’opportuna query SQL
• Si riceverà un handle che identifica il risultato
  ottenuto
• Tramite l’handle sarà possibile scorrere i risultati
  restituiti dal database
• Per sapere quante sono le tuple interessate dal
  comando SQL si utilizzano le funzioni
  pg_num_rows() per SELECT e
  pg_affected_rows() per INSERT, DELETE e
  UPDATE


 A.A. 2005/2006     Basi di Dati e Laboratorio     19




PostgreSQL – Select – 2

• Esempio
   $query = ‘SELECT * FROM mytable’;
   $res = pg_query($db, $query);
   if ($res){
   echo ‘Trovati ‘.pg_num_rows($res).’ record’;
   }




 A.A. 2005/2006     Basi di Dati e Laboratorio     20




Gestione dei risultati – 1

• E’ possibile farsi restituire i risultati di una
  SELECT come un array
• Funzione pg_fetch_array
  array pg_fetch_array (resource result
                            [, int result_type])

• result_type è uno a scelta fra
   – PGSQL_ASSOC
   – PGSQL_NUM
   – PGSQL_BOTH (default)


 A.A. 2005/2006     Basi di Dati e Laboratorio     21




                                                         7
Gestione dei risultati – 2

• Esempio                                        MYTABLE
                                                ID   TITLE
                                              value1 value2
   – PGSQL_BOTH
   $row = array([0] => array(
                                [0] => “value1”,
                    PGSQL_NUM
                                [1] => “value2”,
                                [‘ID’] => “value1”,
                  PGSQL_ASSOC
                                [‘TITLE’] => “value2”
                              ))

 A.A. 2005/2006         Basi di Dati e Laboratorio        22




Gestione dei risultati – 3

• Esempio
  while ($row = pg_fetch_array($res, PGSQL_ASSOC)) {
      printf (quot;ID: %s Title: %squot;, $row[‘id’],
                                  $row[‘title’]);
  }




 A.A. 2005/2006         Basi di Dati e Laboratorio        23




Liberare la memoria
• In caso di uno script che esegua un numero
  elevato di query, ognuna delle quali restituisca
  un elevato numero di tuple, può essere utile
  liberare progressivamente la memoria utilizzata
  dalle query precedenti
  mysql_free_result($res) || pg_free_result($res)

  Dove $res è un handle di risultato restituito da
  una mysql_query() o da una pg_query()
• La memoria viene comunque liberata al termine
  dell’esecuzione dello script.


 A.A. 2005/2006         Basi di Dati e Laboratorio        24




                                                               8
Chiusura della connessione

• Non strettamente necessaria. Alla fine
  dello script le connessioni non persistenti
  ancora aperte vengono chiuse
  automaticamente.
  mysql_close($db)   || pg_close($db)

  Dove $db è un’handle di connessione
  restituito da una mysql_connect() o da una
  pg_connect()
• Le connessioni persistenti invece non
  vengono chiuse
 A.A. 2005/2006      Basi di Dati e Laboratorio   25




PEAR

• PHP Extension and Application Repository
• Offre un insieme di pacchetti di utilità molto
  ampio
   – Posta elettronica
   – XML
   – Database
   –…
• Disponibilità di un client pear per installare
  e configurare automaticamente pacchetti
  PEAR

 A.A. 2005/2006      Basi di Dati e Laboratorio   26




Le librerie PEAR

• Una volta installato un pacchetto PEAR le
  sue funzionalità solo disponibili come
  oggetti PHP e librerie di funzioni
• Il riferimento alle funzioni PEAR avviene
  per mezzo dell’istruzione
   – require_once
• Esempio:
   – require_once ‘DB.php’



 A.A. 2005/2006      Basi di Dati e Laboratorio   27




                                                       9
PEAR DB

• Pear DB offre un insieme di specifiche di
  accesso ai database generalizzato, capace
  di prescindere dalle librerie specifiche di
  supporto ai vari DBMS
• I parametri relativi allo specifico DBMS si
  configurano attraverso il metodo DSN, che
  adotta il formati URI per la localizzazione
  del DBMS


 A.A. 2005/2006    Basi di Dati e Laboratorio   28




DSN

• Sintassi:
   – dbtype://username:password@protocol+hosts/
     database?option=value
• Esempio:
   – $dsn = “pgsql://dblab:bdlab@localhost/lab”;
   – $db = DB::connect($dsn);
   – Si connette a un database postgres di nome
     lab su localhost con credenziali
     (nomeutente:password) dblab:bdlab


 A.A. 2005/2006    Basi di Dati e Laboratorio   29




Esecuzione di SQL

• Pear DB ha quattro principali metodi per
  eseguire statement SQL
   – query()
   – limitQuery()
   – prepare()/execute()
   – simpleQuery()




 A.A. 2005/2006    Basi di Dati e Laboratorio   30




                                                     10
Query

• query($query,$par=array())
• Restituisce un valore booleano se non ci
  sono risultati o un oggetto che contiene i
  risultati dell’interrogazione




 A.A. 2005/2006    Basi di Dati e Laboratorio   31




limitQuery

• limitQuery($query, $from, $count,
  $par=Array())
• Lavora come Query() ad eccezione del
  fatto che i parametri $from e $count
  stabiliscono da dove e per quante righe
  considerare i risultati




 A.A. 2005/2006    Basi di Dati e Laboratorio   32




Prepare e execute

• prepare($query)
   – Pre-analizza la query senza però inviarla e
     eseguirla effettivamente sulla base di dati
• execute($s,$data=array())
   – Esegue la query pre-analizzata $s con i dati
     contenuti in $data




 A.A. 2005/2006    Basi di Dati e Laboratorio   33




                                                     11
simpleQuery

• simpleQuery($query)
• Usata per statement senza valori di ritorno,
  come ad esempio gli statement DDL
• Esempio:
   – $db->simpleQuery(“CREATE TABLE …”);




 A.A. 2005/2006         Basi di Dati e Laboratorio    34




Recupero dei dati

• Modalità:
   – DB_FETCHMODE_ORDERED
         • Restituisce un array indicizzato numericamente
   – DB_FETCHMODE_ASSOC
         • Restituisce un array associativo
   – DB_FETCHMODE_OBJECT
         • Restituisce un oggetto




 A.A. 2005/2006         Basi di Dati e Laboratorio    35




Configurazione

• La modalità di recupero può essere
  configurata
• Per tutte le query
   – $db->setFetchMode(<MODALITA’>)
• Per una query specifica
   – $riga = $result->fetchRow(<MODALITA’>)
   – $result->fetchInto($riga, <MODALITA’>)




 A.A. 2005/2006         Basi di Dati e Laboratorio    36




                                                            12
Uso di classi personalizzate

• Se si usa setFetchMode() è possibile
  specificare una classe definita dallo script
  per la memorizzazione dei risultati
• L’unico vincolo è che la classe
  personalizzata abbia un solo array come
  argomento del costruttore
• Per i nomi delle proprietà si fa riferimento
  ai nomi dei campi del DB


 A.A. 2005/2006   Basi di Dati e Laboratorio   37




                                                    13

More Related Content

Similar to Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S

Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cmsorestJump
 
Progetto di Basi di Dati
Progetto di Basi di DatiProgetto di Basi di Dati
Progetto di Basi di Datisegarva
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q Lguestbe916c
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
 
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebSpring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebMassimiliano Dessì
 
Presentazione Testing automatizzato
Presentazione Testing automatizzatoPresentazione Testing automatizzato
Presentazione Testing automatizzatoangelolu
 
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Steve Maraspin
 
Java Unit Testing - In container and database testing
Java Unit Testing - In container and database testingJava Unit Testing - In container and database testing
Java Unit Testing - In container and database testingfgianneschi
 
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenant
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenantSaaS con Symfony2 un caso *molto* concreto di applicazione multitenant
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenantTassi Francesco
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
 

Similar to Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S (20)

Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Java 04
Java 04Java 04
Java 04
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Smau 2006
Smau 2006Smau 2006
Smau 2006
 
Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cms
 
SQL Server2000
SQL Server2000SQL Server2000
SQL Server2000
 
Progetto di Basi di Dati
Progetto di Basi di DatiProgetto di Basi di Dati
Progetto di Basi di Dati
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Basi Di Dati 05
Basi Di Dati 05Basi Di Dati 05
Basi Di Dati 05
 
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebSpring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
 
Presentazione Testing automatizzato
Presentazione Testing automatizzatoPresentazione Testing automatizzato
Presentazione Testing automatizzato
 
Php e database: php mysql
Php e database: php mysqlPhp e database: php mysql
Php e database: php mysql
 
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1
 
Java Unit Testing - In container and database testing
Java Unit Testing - In container and database testingJava Unit Testing - In container and database testing
Java Unit Testing - In container and database testing
 
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenant
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenantSaaS con Symfony2 un caso *molto* concreto di applicazione multitenant
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenant
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Perl Template Toolkit
Perl Template ToolkitPerl Template Toolkit
Perl Template Toolkit
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
 

More from guestbe916c

Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M LLaboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L
Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M Lguestbe916c
 
Corso Di Basi Di Dati 09 Modelli Controllo
Corso Di  Basi Di  Dati 09  Modelli ControlloCorso Di  Basi Di  Dati 09  Modelli Controllo
Corso Di Basi Di Dati 09 Modelli Controlloguestbe916c
 
Esercitazioni 02 S Q L
Esercitazioni 02  S Q LEsercitazioni 02  S Q L
Esercitazioni 02 S Q Lguestbe916c
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Serverguestbe916c
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Clientguestbe916c
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionaleguestbe916c
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioniguestbe916c
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettualeguestbe916c
 
Corso Di Basi Di Dati 03 Progettazione Concettuale
Corso Di  Basi Di  Dati 03  Progettazione ConcettualeCorso Di  Basi Di  Dati 03  Progettazione Concettuale
Corso Di Basi Di Dati 03 Progettazione Concettualeguestbe916c
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazioneguestbe916c
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logicaguestbe916c
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M Lguestbe916c
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Queryguestbe916c
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q Lguestbe916c
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioniguestbe916c
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logicaguestbe916c
 
Laboratorio Di Basi Di Dati 05 Architettura Del Web
Laboratorio Di  Basi Di  Dati 05  Architettura Del  WebLaboratorio Di  Basi Di  Dati 05  Architettura Del  Web
Laboratorio Di Basi Di Dati 05 Architettura Del Webguestbe916c
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Datiguestbe916c
 

More from guestbe916c (20)

Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M LLaboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L
Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
 
Corso Di Basi Di Dati 09 Modelli Controllo
Corso Di  Basi Di  Dati 09  Modelli ControlloCorso Di  Basi Di  Dati 09  Modelli Controllo
Corso Di Basi Di Dati 09 Modelli Controllo
 
Esercitazioni 02 S Q L
Esercitazioni 02  S Q LEsercitazioni 02  S Q L
Esercitazioni 02 S Q L
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionale
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioni
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
 
Corso Di Basi Di Dati 03 Progettazione Concettuale
Corso Di  Basi Di  Dati 03  Progettazione ConcettualeCorso Di  Basi Di  Dati 03  Progettazione Concettuale
Corso Di Basi Di Dati 03 Progettazione Concettuale
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazione
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logica
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M L
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Query
 
Algebra
AlgebraAlgebra
Algebra
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q L
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
 
S Q L
S Q LS Q L
S Q L
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logica
 
Laboratorio Di Basi Di Dati 05 Architettura Del Web
Laboratorio Di  Basi Di  Dati 05  Architettura Del  WebLaboratorio Di  Basi Di  Dati 05  Architettura Del  Web
Laboratorio Di Basi Di Dati 05 Architettura Del Web
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Dati
 

Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S

  • 1. Corso di Basi di Dati e Laboratorio PHP DB Alfio Ferrara – Stefano Montanelli 17/01/2006 Basi di Dati e Laboratorio 1 PHP e DBMS – 1 • L’uso dei DBMS con PHP si basa su alcuni semplici elementi fondamentali – Funzioni di connessione ai database e handle di connessione – Funzioni per inviare comandi SQL ai database – Funzioni per scorrere i risultati delle query A.A. 2005/2006 Basi di Dati e Laboratorio 2 PHP e DBMS – 2 • Sono disponibili librerie di astrazione sui DBMS che permettono (entro limiti dipendenti dall’implementazione) di scrivere codice indipendente dal DBMS utilizzato. (vedi Pear) A.A. 2005/2006 Basi di Dati e Laboratorio 3 1
  • 2. MySQL • Connessioni ad un database MySQL – mysql_connect (semplice) – mysql_pconnect (persistente) – mysql_select_db – mysql_query – mysql_fetch_array – mysql_free_result – mysql_close A.A. 2005/2006 Basi di Dati e Laboratorio 4 MySQL – Connessione – 1 • 2 tipi di connessione – Semplice • Viene chiusa alla terminazione dello script o tramite l’istruzione mysql_close() – Persistente • Utilizza, se presente, una connessione precedentemente stabilita • Non viene chiusa alla terminazione dello script • Non viene chiusa dalla funzione mysql_close() A.A. 2005/2006 Basi di Dati e Laboratorio 5 MySQL – Connessione – 2 • Esempi di connessione • Sintassi resource mysql_connect ([string server [, string username[, string password [, bool new_link[, int client_flags]]]]]) – Es. $db = mysql_connect (‘localhost’, ‘dbuser’, ‘dbpassword’); – L’handle ottenuto ($db) verrà utilizzato per le successive chiamate per indicare la connessione sulla quale si desidera operare. A.A. 2005/2006 Basi di Dati e Laboratorio 6 2
  • 3. MySQL – Connessione – 3 • Dopo aver stabilito la connessione, occorre selezionare il database su cui si desidera operare bool mysql_select_db (string database_name [, resource link_identifier]) mysql_select_db(‘mydb’, $db) A.A. 2005/2006 Basi di Dati e Laboratorio 7 MySQL – Interazione • Tramite il comando mysql_query() è possibile mandare comandi SQL al database. Questo permette di – Inserire dati – Modificare dati – Cancellare dati resource mysql_query (string query [, resource link_identifier]) A.A. 2005/2006 Basi di Dati e Laboratorio 8 MySQL – Select – 1 • Per selezionare i dati da una tabella si invia al server l’opportuna query SQL • Si riceverà un handle che identifica il risultato ottenuto • Tramite l’handle sarà possibile scorrere i risultati restituiti dal database • Per sapere quante sono le tuple interessate dal comando SQL si utilizzano le funzioni mysql_num_rows() per SELECT e mysql_affected_rows() per INSERT, DELETE e UPDATE A.A. 2005/2006 Basi di Dati e Laboratorio 9 3
  • 4. MySQL – Select – 2 • Esempio $query = ‘SELECT * FROM mytable’; $res = mysql_query($query, $db); if ($res){ echo ‘Trovati ‘.mysql_num_rows($res).’ record’; } A.A. 2005/2006 Basi di Dati e Laboratorio 10 Gestione dei risultati – 1 • E’ possibile farsi restituire i risultati di una SELECT come un array • Funzione mysql_fetch_array array mysql_fetch_array (resource result [, int result_type]) • result_type è uno a scelta fra – MYSQL_ASSOC – MYSQL_NUM – MYSQL_BOTH (default) A.A. 2005/2006 Basi di Dati e Laboratorio 11 Gestione dei risultati – 2 • Esempio MYTABLE ID TITLE value1 value2 – MYSQL_BOTH $row = array([0] => array( [0] => “value1”, MYSQL_NUM [1] => “value2”, [‘ID’] => “value1”, MYSQL_ASSOC [‘TITLE’] => “value2” )) A.A. 2005/2006 Basi di Dati e Laboratorio 12 4
  • 5. Gestione dei risultati – 3 • Esempio while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { printf (quot;ID: %s Title: %squot;, $row[‘id’], $row[‘title’]); } A.A. 2005/2006 Basi di Dati e Laboratorio 13 PostgreSQL • Connessioni ad un database PostgreSQL – pg_connect (semplice) – pg_pconnect (persistente) – pg_query – pg_fetch_array – pg_free_result – pg_close A.A. 2005/2006 Basi di Dati e Laboratorio 14 PostgreSQL – Connessione – 1 • 2 tipi di connessione – Semplice • Viene chiusa alla terminazione dello script o tramite l’istruzione pg_close() – Persistente • Utilizza, se presente, una connessione precedentemente stabilita • Non viene chiusa alla terminazione dello script • Non viene chiusa dalla funzione pg_close() A.A. 2005/2006 Basi di Dati e Laboratorio 15 5
  • 6. PostgreSQL – Connessione – 2 • Esempi di connessione • Sintassi resource pg_connect (string connection_string [, int connection_type]) – La stringa di connessione può essere una composizione variabile dei seguenti elementi: host=<nomehost> port=<numeroporta> dbname=<nomedb> user=<username> password=<password> – Il parametro connection_type viene usato per forzare esplicitamente una nuova connessione A.A. 2005/2006 Basi di Dati e Laboratorio 16 PostgreSQL – Connessione – 3 ES. $db = pg_connect (“host=localhost user=test password=hackme dbname=testdb”); – I diversi parametri hanno tutti un valore di default. Trovate il valore per ognuno. – L’handle ottenuto ($db) verrà utilizzato per le successive chiamate per indicare la connessione sulla quale si desidera operare A.A. 2005/2006 Basi di Dati e Laboratorio 17 PostgreSQL – Interazione • Tramite il comando pg_query() è possibile mandare comandi SQL al database Questo permette di – Inserire dati – Modificare dati – Cancellare dati resource pg_query (resource connection, string query) A.A. 2005/2006 Basi di Dati e Laboratorio 18 6
  • 7. PostgreSQL – Select – 1 • Per selezionare i dati da una tabella si invia al server l’opportuna query SQL • Si riceverà un handle che identifica il risultato ottenuto • Tramite l’handle sarà possibile scorrere i risultati restituiti dal database • Per sapere quante sono le tuple interessate dal comando SQL si utilizzano le funzioni pg_num_rows() per SELECT e pg_affected_rows() per INSERT, DELETE e UPDATE A.A. 2005/2006 Basi di Dati e Laboratorio 19 PostgreSQL – Select – 2 • Esempio $query = ‘SELECT * FROM mytable’; $res = pg_query($db, $query); if ($res){ echo ‘Trovati ‘.pg_num_rows($res).’ record’; } A.A. 2005/2006 Basi di Dati e Laboratorio 20 Gestione dei risultati – 1 • E’ possibile farsi restituire i risultati di una SELECT come un array • Funzione pg_fetch_array array pg_fetch_array (resource result [, int result_type]) • result_type è uno a scelta fra – PGSQL_ASSOC – PGSQL_NUM – PGSQL_BOTH (default) A.A. 2005/2006 Basi di Dati e Laboratorio 21 7
  • 8. Gestione dei risultati – 2 • Esempio MYTABLE ID TITLE value1 value2 – PGSQL_BOTH $row = array([0] => array( [0] => “value1”, PGSQL_NUM [1] => “value2”, [‘ID’] => “value1”, PGSQL_ASSOC [‘TITLE’] => “value2” )) A.A. 2005/2006 Basi di Dati e Laboratorio 22 Gestione dei risultati – 3 • Esempio while ($row = pg_fetch_array($res, PGSQL_ASSOC)) { printf (quot;ID: %s Title: %squot;, $row[‘id’], $row[‘title’]); } A.A. 2005/2006 Basi di Dati e Laboratorio 23 Liberare la memoria • In caso di uno script che esegua un numero elevato di query, ognuna delle quali restituisca un elevato numero di tuple, può essere utile liberare progressivamente la memoria utilizzata dalle query precedenti mysql_free_result($res) || pg_free_result($res) Dove $res è un handle di risultato restituito da una mysql_query() o da una pg_query() • La memoria viene comunque liberata al termine dell’esecuzione dello script. A.A. 2005/2006 Basi di Dati e Laboratorio 24 8
  • 9. Chiusura della connessione • Non strettamente necessaria. Alla fine dello script le connessioni non persistenti ancora aperte vengono chiuse automaticamente. mysql_close($db) || pg_close($db) Dove $db è un’handle di connessione restituito da una mysql_connect() o da una pg_connect() • Le connessioni persistenti invece non vengono chiuse A.A. 2005/2006 Basi di Dati e Laboratorio 25 PEAR • PHP Extension and Application Repository • Offre un insieme di pacchetti di utilità molto ampio – Posta elettronica – XML – Database –… • Disponibilità di un client pear per installare e configurare automaticamente pacchetti PEAR A.A. 2005/2006 Basi di Dati e Laboratorio 26 Le librerie PEAR • Una volta installato un pacchetto PEAR le sue funzionalità solo disponibili come oggetti PHP e librerie di funzioni • Il riferimento alle funzioni PEAR avviene per mezzo dell’istruzione – require_once • Esempio: – require_once ‘DB.php’ A.A. 2005/2006 Basi di Dati e Laboratorio 27 9
  • 10. PEAR DB • Pear DB offre un insieme di specifiche di accesso ai database generalizzato, capace di prescindere dalle librerie specifiche di supporto ai vari DBMS • I parametri relativi allo specifico DBMS si configurano attraverso il metodo DSN, che adotta il formati URI per la localizzazione del DBMS A.A. 2005/2006 Basi di Dati e Laboratorio 28 DSN • Sintassi: – dbtype://username:password@protocol+hosts/ database?option=value • Esempio: – $dsn = “pgsql://dblab:bdlab@localhost/lab”; – $db = DB::connect($dsn); – Si connette a un database postgres di nome lab su localhost con credenziali (nomeutente:password) dblab:bdlab A.A. 2005/2006 Basi di Dati e Laboratorio 29 Esecuzione di SQL • Pear DB ha quattro principali metodi per eseguire statement SQL – query() – limitQuery() – prepare()/execute() – simpleQuery() A.A. 2005/2006 Basi di Dati e Laboratorio 30 10
  • 11. Query • query($query,$par=array()) • Restituisce un valore booleano se non ci sono risultati o un oggetto che contiene i risultati dell’interrogazione A.A. 2005/2006 Basi di Dati e Laboratorio 31 limitQuery • limitQuery($query, $from, $count, $par=Array()) • Lavora come Query() ad eccezione del fatto che i parametri $from e $count stabiliscono da dove e per quante righe considerare i risultati A.A. 2005/2006 Basi di Dati e Laboratorio 32 Prepare e execute • prepare($query) – Pre-analizza la query senza però inviarla e eseguirla effettivamente sulla base di dati • execute($s,$data=array()) – Esegue la query pre-analizzata $s con i dati contenuti in $data A.A. 2005/2006 Basi di Dati e Laboratorio 33 11
  • 12. simpleQuery • simpleQuery($query) • Usata per statement senza valori di ritorno, come ad esempio gli statement DDL • Esempio: – $db->simpleQuery(“CREATE TABLE …”); A.A. 2005/2006 Basi di Dati e Laboratorio 34 Recupero dei dati • Modalità: – DB_FETCHMODE_ORDERED • Restituisce un array indicizzato numericamente – DB_FETCHMODE_ASSOC • Restituisce un array associativo – DB_FETCHMODE_OBJECT • Restituisce un oggetto A.A. 2005/2006 Basi di Dati e Laboratorio 35 Configurazione • La modalità di recupero può essere configurata • Per tutte le query – $db->setFetchMode(<MODALITA’>) • Per una query specifica – $riga = $result->fetchRow(<MODALITA’>) – $result->fetchInto($riga, <MODALITA’>) A.A. 2005/2006 Basi di Dati e Laboratorio 36 12
  • 13. Uso di classi personalizzate • Se si usa setFetchMode() è possibile specificare una classe definita dallo script per la memorizzazione dei risultati • L’unico vincolo è che la classe personalizzata abbia un solo array come argomento del costruttore • Per i nomi delle proprietà si fa riferimento ai nomi dei campi del DB A.A. 2005/2006 Basi di Dati e Laboratorio 37 13