PHP 5. Accesso a database



Documenti analoghi
PHP 5. PHP ed i database. Database e tabelle. Struttura di un DB relazionale. Accesso a database

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

MySQL Database Management System

MySQL Database Management System

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

PHP e Structured Query Language

PHP e MySQL. Scripting server-side per accesso a DB MySQL

Lavorare con MySQL Parte Seconda.

Programmazione Web. Laboratorio 4: PHP e MySQL

PHP e MySQL. Guida scaricata da

DBMS (Data Base Management System)

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

19. LA PROGRAMMAZIONE LATO SERVER


DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Esercitazione sulle libpq - libreria C per PostgreSQL

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Access. P a r t e p r i m a

GERARCHIE RICORSIVE - SQL SERVER 2008

Capitolo 13. Interrogare una base di dati

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server)

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

Progettazione Web Applicazioni client-server

Definizione di domini

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Lezione 8. Metadati, Viste e Trigger

Metodi per la Gestione dei Dati (lezioni di laboratorio)

Informatica per le discipline umanistiche 2 lezione 10

Perchè un database? Perchè un database? Tipi di DataBase. Scegliere un database. ! Sicurezza. ! Evitare la ridondanza. ! Architettura multilivello

Architettura a tre livelli (1)

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Dispensa di database Access

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Le query. Lezione 6 a cura di Maria Novella Mosciatti


<?php include './include/page.php';

APPUNTI DI PHP : V INFORMATICA SEZIONE G

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Introduzione a MySQL

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Strumenti Software per Esercitazioni (ambiente Windows) Basi di Dati L LS Ing. Gestionale

bool mysql_select_db([string database_name [,resource link_identifier]]) Connessione ad un server MySQL vuole conettere

Laboratorio di Basi di Dati e Web

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF

Volumi di riferimento

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

Introduzione ai database relazionali

CONCETTO DI ANNIDAMENTO

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Lezione 9. Applicazioni tradizionali

Concetti fondamentali dei database database Cos'è un database Principali database

Accesso a basi di dati con ASP. Algoritmo per visualizzare un DB

Esercitazione PAM. (Php Apache MySQL)

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Laboratorio di Basi di dati

Un client su arduino invia i dati acquisiti ad un database

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

User Tools: DataBase Manager

Unità 2.1 Comandi sui database

Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

PHP - Storia. Inizialmente sviluppato da Rasmus Lerdorf come serie di script CGI

Corso sul linguaggio SQL

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

2104 volume III Programmazione

Sistemi per la gestione di database: MySQL ( )

Le Basi di Dati. Le Basi di Dati

IL DAT A B A S E DI ALGE B R A N D O

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

MySQL Controllare gli accessi alla base di dati A cura di Silvio Bonechi per

Basi di Dati: Corso di laboratorio

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Al giorno d oggi, i sistemi per la gestione di database

GUIDA PER LA COMPILAZIONE DEL CAMP3

Connessione con MySQL

Amministrare MySQL con PhpMyAdmin

Università degli Studi di Catania Dipartimento di Matematica e Informatica Compilatori 2014/15

Corso di Web Programming

--- PREMESSE INTRODUZIONE. .:luxx:.

Microsoft Access Maschere

Microsoft Access. Microsoft Access

OSSIF WEB. Manuale query builder

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

Sicurezza Informatica: Tecniche di SQL INJECTION

L interfaccia a riga di comando di MySql

I file di dati. Unità didattica D1 1

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

MANUALE PARCELLA FACILE PLUS INDICE

[1] Cross Site Scripting [2] Remote / Local File Inclusion [3] SQL Injection

Obiettivo dell esercitazione

Transcript:

PHP 5 Accesso a database

PHP ed i database PHP funziona con molti database relazionali che includono: Oracle Access Postgres SQL Server MySQL Useremo MySQL poiché è semplice da usare, gratuito e molto popolare Tecnologie di Sviluppo per il WEB 2

Database e tabelle Un data base relazionale si articola in tabelle Ciascuna tabella è costituita da un insieme di record (righe) Un record è costituito da un insieme di campi, che corrispondono alle colonne delle righe Tecnologie di Sviluppo per il WEB 3

Usare un linguaggio di interrogazione Quando si usa un database si usa un differente linguaggio di interrogazione per lavorare con il database stesso Con MySQL, si usa Structured Query Language (SQL), per accedere al database PHP Script Send SQL Query Query Results MySQL Database Tecnologie di Sviluppo per il WEB 4

Creare un istanza di un database Una volta che si ha accesso ad un server con MySQL installato è necessario che qualcuno crei un istanza di un database In genere l istanza è creata dall amministratore del database (DBA) Usiamo PhpMyAdmin oppure... Tecnologie di Sviluppo per il WEB 5

Inserimento di un utente mysql -u root Non chiede la pswd (almeno la I volta) GRANT ALL PRIVILEGES ON *.* TO utentetsw@localhost IDENTIFIED by 'pswd' WITH GRANT OPTION; Ripetere identico GRANT...TO utentetsw@'%'... Tecnologie di Sviluppo per il WEB 6

Creazione di DB mysql -u utentetsw -p CREATE DATABASE studenti; Una sola volta! USE studenti; Ogni volta che vi loggate show tables; CREATE TABLE dati (cognome VARCHAR (30), nome VARCHAR(30), matricola CHAR(10), PRIMARY KEY (matricola) ); LOAD DATA INFILE 'pathtofile' INTO TABLE dati FIELDS TERMINATED BY ';' ; Tecnologie di Sviluppo per il WEB 7

LABORATORIO leggete come fare nella sezione altro del sito del corso: Manuale di configurazione DB Tecnologie di Sviluppo per il WEB 8

SQL Possiamo usare PHP per passare dei comandi ad un database MySQL. Questi comandi usano SQL (Structured Query Language) per interrogare il database SQL è un linguaggio standard Possiamo usare SQL per cercare, aggiornare e cancellare record da un database. SQL è molto potente. A volte i comandi SQL possono diventare molto lunghi per query complesse. Tecnologie di Sviluppo per il WEB 9

SQL di base I quattro comandi SQL su cui ci concentreremo sono: SELECT Seleziona un insieme di record INSERT Inserisce un nuovo record UPDATE Aggiorna un record DELETE Cancella un record Tecnologie di Sviluppo per il WEB 10

Esempio di Select 1 Supponiamo di avere la seguente tabella chiamata students Tecnologie di Sviluppo per il WEB 11

Esempio di Select 2 La query SELECT surname,email FROM students restituisce la seguente tabella Tecnologie di Sviluppo per il WEB 12

Altri usi di SELECT 1 delimitatore di testo SELECT surname FROM students WHERE degree_code='6500' Seleziona dalla tabella students tutti i cognomi che hanno un codice pari a 6500 SELECT * FROM students WHERE degree_code='6500' OR surname='faye' Seleziona dalla tabella students tutti i record con un codice pari a 6500 oppure che hanno cognome Faye Tecnologie di Sviluppo per il WEB 13

Altri usi di SELECT 2 SELECT * FROM students WHERE forename LIKE 'sa%' Seleziona dalla tabella students tutti i record che hanno un nome (forename) che inizia per sa Usando LIKE '%sa' avremmo selezionato tutti i record con forename che finiscono per sa Usando LIKE '%sa%' avremmo selezionato tutti i record con forename contenenti sa Tecnologie di Sviluppo per il WEB 14

DELETE DELETE FROM students WHERE degree_code='2550' Cancella dalla tabella studenti tutti i record che hanno codice 2550 Tenete presente che, nella formulazione della query l apice (' delimitatore di testo ) è fondamentale. Tecnologie di Sviluppo per il WEB 15

INSERT Per inserire record in una tabella dobbiamo fornire il nome dei campi ed i valori ad essi associati. INSERT INTO students (reg_number,surname,forename,degree_code) VALUES (979924,'Blair','Tony','6500') Notate che i dati testuali sono racchiusi tra apici singoli e che manca il campo email Tecnologie di Sviluppo per il WEB 16

UPDATE UPDATE students SET forename='peter' WHERE reg_number=981234 Cambia in Peter il valore del campo forename del record che ha il campo reg_number pari 981234 Tecnologie di Sviluppo per il WEB 17

Schema generale di interrogazione Vediamo quali saranno, in generale, i passi di una interazione tipica: connessione con il DBMS (server DB), Selezione del database invio di una query SQL con ricezione del risultato, stampa (di una elaborazione) del risultato chiusura della connessione con il DBMS Tecnologie di Sviluppo per il WEB 18

Connessione a mysql La funzione PHP che useremo per la connessione a MySQL è: $connessione = mysql_connect($host, $user, $password ); I parametri sono: $host l indirizzo del server su cui gira MySQL in lab.: 192.168.7.40 Si può usare un client 192.168.7.40/phpmyadmin $user identificativo dell utente del DBMS che intendiamo usare per la connessione in lab: reti $password password associata all utente in lab: reti Tecnologie di Sviluppo per il WEB 19

Selezione del database mysql_select_db($database); Seleziona il database $database usando l ultima connessione aperta in lab: TSW-Parente Si creano tabelle con la convenzione per i nomi: USERNAME_NOME_TABELLA mysql_select_db($database, $connessione); Seleziona il database $database usando la connessione $connessione Tecnologie di Sviluppo per il WEB 20

Invio della query a mysql $risultato = mysql_query($query); Invia la query $query al database attivo usando l ultima connessione attiva La risposta è memorizzata in $risultato sotto forma di matrice (ogni riga è un record che soddisfa $query $ris= mysql_query($query, $connessione); Invia la query $query al database usando la connessione $connessione Tecnologie di Sviluppo per il WEB 21

Database: tsw struttura tabella: studenti Tecnologie di Sviluppo per il WEB 22

Esempio 1 <?php /* Connessione al database */ $connessione = mysql_connect("localhost", corsotsw", "tsw") or die("connessione non riuscita"); echo "<h2>connessione Riuscita</h2>"; /* Selezione del database */ mysql_select_db("studenti") or die("selezione del database non riuscita"); echo "<h2>database Selezionato</h2>"; Tecnologie di Sviluppo per il WEB 23

Esempio 2 /* Esecuzione di una query SQL */ $query = "SELECT * FROM dati"; $risultato = mysql_query($query) or die("query fallita"); echo "<h2>query Riuscita</h2>";?> Tecnologie di Sviluppo per il WEB 24

Esempio con errore. /* Esecuzione di una query SQL */ $query = "SELECT * FROM studenti"; $risultato = mysql_query($query) or die("<h2 style=\"color:red\"> Query fallita</h2>"); echo "<h2>query Riuscita</h2>";?> Tecnologie di Sviluppo per il WEB 25

Liberare risorse e chiudere la connessione Con mysql_free_result($risultato); liberiamo le risorse del sistema occupate dal risultato della nostra query Mentre con mysql_close($connessione); chiudiamo la connessione al database; $connessione è opzionale: se manca, verrà terminata l'ultima connessione aperta Tecnologie di Sviluppo per il WEB 26

Accedere ai risultati di una query Si usano mysql_fetch_row($risultato) mysql_fetch_array($risultato) mysql_fetch_object($risultato) restituiscono righe mysql_result($risultato, $indice/$nome) restituisce un singolo campo mysql_data_seek($risultato, $numriga) sposta il puntatore alla riga indicata Tecnologie di Sviluppo per il WEB 27

mysql_fetch_row Restituisce una riga di dati dal risultato specificato come parametro Restituisce NULL se non ci sono più righe nella tabella ($risultato) La riga è restituita come un array L array parte dall'indice 0 Il primo elemento dell array contiene il primo campo Tecnologie di Sviluppo per il WEB 28

mysql_fetch_array Prende due parametri il primo è il risultato dell invocazione di mysql_query ($query) il secondo è una costante e specifica la forma dell array (sl. successiva) Possiamo non specificarlo La funzione restituisce NULL se non ci sono più righe nella tabella In genere, la funzione viene inserita come condizione di un ciclo while Tecnologie di Sviluppo per il WEB 29

Costanti di mysql_fetch_array MYSQL_NUM (valore di default) Le colonne risultanti dalla query sono restituite in un array avente un indice numerico per i campi. Questo indice inizia da 0 (il primo campo del risultato) MYSQL_ASSOC Le colonne risultanti dalla query sono restituite in un array avente il nome del campo come indice dell'array MYSQL_BOTH Le colonne risultanti dalla query sono restituite in un array avente sia un indice numerico sia un indice costituito dal nome del campo Tecnologie di Sviluppo per il WEB 30

Esempio 1 echo "<table>"; while($riga=mysql_fetch_row($risultato)){ echo "<tr><td>".$riga[0]."</td><td>"; echo $riga[1]."</td><td>".$riga[2]."</td></tr>"; } echo("</table>"); ESEMPIO Tecnologie di Sviluppo per il WEB 31

Esempio 2 echo "<h2>risultato</h2>"; echo("<table>"); while($riga = mysql_fetch_array($risultato, MYSQL_BOTH)) { echo "<tr><td>".$riga[0]."</td><td>"; echo $riga[nome]."</td><td>".$riga[2]; echo "</td></tr>"; } echo("</table>"); Tecnologie di Sviluppo per il WEB 32

Pattern comune per accesso a DB $cn = mysql_connect($host, $user, $password ); mysql_select_db($database); $query = ". "; $risultato = mysql_query($query); while ($riga = mysql_fetch_array($risultato)) { // Elaborazione risultato foreach($riga as $campo => $valore) // Fare qualcosa con $campo e $valore } mysql_free_result($risultato); mysql_close($cn); Tecnologie di Sviluppo per il WEB 33

Altro modo per accedere ai dati for($i=0; $i<mysql_num_rows($risultato); $i++) { mysql_data_seek($risultato, $i) } //Elaborazione della riga corrente $riga=mysql_fetch_row($risultato); //Utilizzo dei dati estrapolati foreach($riga as $campo => $valore) Tecnologie di Sviluppo per il WEB 34

Quoting automatico di parametri La configurazione di default di PHP chiama automaticamente la funzione addslashes sui cookie e sui parametri ricevuti con GET o POST Detta: magic quotes Questa funzione automaticamente aggiunge un backslash (\) prima delle virgolette semplici, virgolette doppie e slash (/) Ciò è dovuto al fatto che in questo modo è più facile usare parametri di un modulo in una query ad un database I caratteri ', " e / creano problemi nelle query Al momento è deprecata e sarà rimossa in PHP6 (si dovrebbero usare meccanismi di escape fatti ad-hoc) Tecnologie di Sviluppo per il WEB 35

Esempio Se la variabile $editore proveniente da un parametro di modulo vale O'Reilly, allora esso viene convertito automaticamente in O\'Reilly Così possiamo usarlo direttamente nella seguente query $query = "(SELECT * FROM LIBRI WHERE EDITORE ='$editore') "; che diventerà (SELECT * FROM LIBRI WHERE EDITORE ='O\'Reilly') Tecnologie di Sviluppo per il WEB 36

Rimuovere il backslash (\) Dopo aver letto i parametri di un modulo è conveniente rimuovere i backslash se i valori dei parametri non devono essere inseriti in un database. Usiamo la funzione stripslashes Se il nostro script lavora con molti parametri di tipo stringa è meglio scrivere una funzione ad hoc come la funzione seguente Assumiamo che METHOD=GET Tecnologie di Sviluppo per il WEB 37

function parametro_grezzo($nome) { return ini_get('magic_quotes_gpc')? stripslashes($_get[$nome]) : $_GET[$nome]; } ini_get restituisce il valore di una opzione come una stringa. Utilizzo: $cognome = parametro_grezzo('cog'); L opzione magic_quotes_gpc abilitata in php.ini istruisce PHP ad invocare automaticamente addslashes Tecnologie di Sviluppo per il WEB 38

Esempio <?php echo get_magic_quotes_gpc(); // 1 echo $_POST['lastname']; // O\'reilly echo addslashes($_post['lastname']); // O\\\'reilly if (!get_magic_quotes_gpc()) { $lastname = addslashes($_post['lastname']); } else { $lastname = $_POST['lastname']; } echo $lastname; // O\'reilly $sql = "INSERT INTO lastnames VALUES ('$lastname')";?> Tecnologie di Sviluppo per il WEB 39

Esempi di funzioni MySQL 1 mysql_affected_rows Ottiene il numero di righe coinvolte nelle precedenti operazioni MySQL mysql_change_user Cambia l'utente della connessione attiva mysql_close Chiude una connessione MySQL mysql_connect Apre una connessione ad un server MySQL mysql_create_db Crea un database MySQL mysql_data_seek Muove il puntatore interno del risultato Tecnologie di Sviluppo per il WEB 40

Esempi di funzioni MySQL 2 mysql_query Invia una query MySQL mysql_drop_db Elimina (cancella) un database MySQL mysql_errno Restituisce il valore numerico del messaggio di errore della precedente operazione MySQL mysql_error Restituisce il testo del messagio di errore della precedente operazione MySQL mysql_fetch_array Carica una riga del risultato come un array associativo, un array numerico o entrambe. Tecnologie di Sviluppo per il WEB 41

Esempi di funzioni MySQL 3 mysql_fetch_assoc Carica una riga del risultato come array associativo mysql_fetch_field Ottiene informazioni sulla colonna da un risultato e le restituisce come oggetto mysql_list_dbs Elenca i database disponibili sul server MySQL mysql_list_tables Elenca le tabelle presenti in un database MySQL mysql_field_name Restituisce il nome del campo Tecnologie di Sviluppo per il WEB 42