Lezione 3 Massimiliano Palese – IEEE Student Member PHP-MySQL Connessione ad un database Lettura di record Inserimento di record Aggiornamento di record Cancellazione di record Un sito web dinamico difficilmente riesce a fare a meno di un database: basti pensare alla gestione degli utenti, dei permessi, dei contenuti, ecc PHP mette a disposizione dei comandi che permettono di interagire con MySQL in pochissime linee di codice; Un DATABASE (Base di Dati) è una collezione di dati; Questa collezione di dati viene gestita ed organizzata da un software specifico, chiamato DBMS (DataBase Management System, Sistema di Gestione di Basi di Dati), che si frappone tra la memorizzazione fisica degli stessi, e le applicazioni che li richiedono; Il DBMS espone solo il modello logico dei dati memorizzati, nascondendo qualunque implementazione fisica degli stessi (localizzazione sugli hard-disk, partizionamento, file system usato, ecc); DataBase Gerarchici, in cui i dati sono organizzati in insiemi, connessi in una struttura ad albero: ogni ramo ha più figli, ma ogni insieme è figlio di un solo ramo. IN DISUSO DataBase Reticolari, che derivano dai database gerarchici, con la differenza che ogni insieme può essere figlio di più rami; IN DISUSO; DataBase Relazionali, nei quali domina un rapporto di “relazione”: i dati delle tabelle sono connessi da relazioni; questo è il modello più diffuso ed utilizzato; DataBase Object-Oriented, sono l’ultima frontiera delle basi di dati; la caratteristica principale sta nell’implementazione lato DBMS delle regole di manipolazione dei dati, che nei modelli precedenti è rimandata alla specifica applicazione software che li utilizza; Il linguaggio standard parlato dai DBMS Relazionali L’ SQL (Structured Query Language) è un linguaggio progettato per : ◦ Creare e modificare Schemi di Database (Modellazione Logica) (DDL – Data Definition Language); ◦ Inserire, modificare, e gestire dati memorizzati (DML – Data Manipulation Language); ◦ Interrogare i dati memorizzati (DQL – Data Query Language); ◦ Creare e gestire strumenti di controllo ed accesso ai dati (DCL – Data Control Language). CREATE TABLE ‘nome_tabella’ ( ‘colonna_uno’ tipo_dato, ‘colonna_due’ tipo_dato, … … ); INSERT INTO ‘nome_tabella’(‘colonna_uno’,’ colonna_due’,’colonna_tre’,…) VALUES (‘valore_testo’ , ’valore_testo’ , valore_numero , …); SELECT colonna_uno, colonna_due, … FROM tabella_uno, tabella_due, tabella_tre , … WHERE [vincoli]; UPDATE tabella SET colonna_uno=valore WHERE [vincoli]; DELETE FROM tabella WHERE [vincoli]; Implementiamo un database “db_corso” con una tabella dalle colonne: ◦ ◦ ◦ ◦ ID , autoincrement Nome, varchar(50) Cognome, varchar(50) Email, varchar(50) Innanzitutto, occorre effettuare una connessione al server DBMS di MySQL, attraverso l’istruzione: $conn=mysqli_connect($host, $user, $pass,$db) or die (“Impossibile connettersi al database!”); Es: $host=“localhost”; $query_ins = “INSERT INTO ‘tabella’ (..,..,..) VALUES (…,…)”; Esecuzione della query: $result = $conn->query($query_ins); Record inserito: $id_nuovo = mysqli_insert_id($conn); Scrivere una pagina HTML contenente un Form con nome, cognome, email. Inviare tale form ad uno script PHP che ne memorizza le informazioni sulla tabella STUDENTI del database db_corso, con colonne: id -> AUTOINCREMENT nome -> VARCHAR (testo) cognome -> VARCHAR (testo) email -> VARCHAR (testo) <HTML> <BODY> <FORM ACTION=“inserisci.php” METHOD=“POST”> Nome: <INPUT TYPE=“TEXT” NAME=“nome”><BR> Cognome: <INPUT TYPE=“TEXT” NAME=“cognome”><BR> eMail: <INPUT TYPE=“TEXT” NAME=“email”><BR> <INPUT TYPE=“SUBMIT” VALUE=“Invia”> <INPUT TYPE=“RESET” VALUE=“Cancella”> </FORM> </BODY> </HTML> <?php $nome=$_POST[“nome”]; $cognome=$_POST[“cognome”]; $email=$_POST[“email”]; $conn=mysqli_connect(“192.168.0.100”,”studente”,””, ”db_corso”) or die (“Impossibile connettersi !”); $qr_ins=“INSERT INTO studenti(nome,cognome,email) VALUES (‘$nome’, ‘$cognome’, ‘$email’);”; If ( $conn->query($qr_ins) ) echo “Record creato ! ID: ” . mysqli_insert_id($conn); else echo “Errore !”; ?> Definizione della query: $str_query = “SELECT * FROM .. WHERE … ;”; Esecuzione della query: $result = $conn->query($str_query); Lettura dei dati: while ($row = mysqli_fetch_array($result) ){ echo “Campo uno: ”.$row[“campo_uno”] ; } Record trovati/modificati: $tot_record = mysqli_affected_rows($conn); Riepilogare i dati della tabella STUDENTI del database db_corso, riportando in una tabella HTML le colonne: ◦ ◦ ◦ ◦ ID Nome Cognome eMail <HTML><BODY> <?php $conn=mysqli_connect(“192.168.0.100”,”studente”,””,”db_corso”); $qr=“SELECT id, nome, cognome, email FROM studenti;” $result=$conn->query($qr); ?> <TABLE BORDER=“1”> While ($riga=mysqli_fetch_array($result)){ echo ‘<TR><TD>’.$riga[“id”].’</TD><TD>’. $riga[“nome”].’</TD><TD>’. $riga[“cognome”].’</TD>’. $riga[“email”].’<TD></TD></TR>’; } ?> </TABLE></BODY></HTML> $query_ins = “UPDATE ‘tabella’ SET colonna=valore WHERE [vincoli]”; Esecuzione della query: $result = $conn->query($query_ins); Record modificati: $tot_record = mysqli_affected_rows($conn); $query_ins = “DELETE FROM tabella WHERE [vincoli]”; Esecuzione della query: $result = $conn->query($query_ins); Record eliminati: $tot_record = mysqli_affected_rows($conn); Modificare la tabella di riepilogo dati, aggiungendo una colonna che permetta di eliminare la riga selezionata. <HTML><BODY> <?php $conn=mysqli_connect(“192.168.0.100”,”studente”,””,”db_corso”); $qr=“SELECT id, nome, cognome, email FROM studenti;” $result=$conn->query($qr); ?> <TABLE BORDER=“1”> While ($riga=mysqli_fetch_array($result)){ echo ‘<TR><TD>’.$riga[“id”].’</TD><TD>’. $riga[“nome”].’</TD><TD>’. $riga[“cognome”].’</TD>’. $riga[“email”].’<TD></TD><TD><A HREF=“cancella.php?id=’.$riga[“id”].’”><FONT COLOR=“red”>Elimina</FONT></A></TD></TR>’; } ?> </TABLE></BODY></HTML>