PHP ESSENTIALS #10 By WI400 Team : database e sql sql “dialetto” e sintassi SQL: Sintassi SQL E’ possibile inserire un record con l’istruzione SQL INSERT: INSERT INTO users VALUES (‘mario', md5(‘mario'), ‘Mario', ‘Rossi'); |3 | 13/05/10 SQL: Sintassi SQL E’ possibile specificare solo le colonne che vogliamo valorizzare quando vogliamo inserire un nuovo record: INSERT INTO users (username, password) VALUES (‘mario’, md5(‘mario’)); |4 | 13/05/10 SQL: Sintassi SQL |5 E’ possibile aggiornare il contenuto di un record con l’istruzione SQL UPDATE: UPDATE users SET nome = ‘Marco'; La precedente istruzione aggiorna tutti i record. Utilizzare la clausola WHERE per limitare i record da aggiornare: UPDATE users SET nome = ‘Nuovo valore' WHERE username = ‘Vecchio valore' OR username = ‘Vecchio valore 2'; | 13/05/10 SQL: Sintassi SQL |6 E’ possibile selezionare i record di una tabella con l’istruzione SQL SELECT: SELECT username FROM users; La precedente istruzione seleziona solo la colonna username di tutti i record della tabella. E’ possibile limitare il numero dei record da estrarre con la clausola WHERE: SELECT * FROM users WHERE username = 'Chris'; | 13/05/10 SQL: Sintassi SQL |7 Per cancellare i record, usare l’istruzione SQL DELETE: DELETE FROM users; La precedente istruzione elimina tutti i record della tabella. E’ possibile limitare il numero dei record da cancellare con la clausola WHERE: DELETE FROM users WHERE username = ‘mario'; | 13/05/10 Databases SQLite MySQL Databases: SQLite |9 SQLite è stato introdotto con il PHP 5. SQLite usa un file per la memorizzazione dei dati e non richiede un server SQL esterno. Tutto viene gestito in librerie client, questo significa che il PHP offre tutte le funzionalità senza avere la necessità di dipendere da entità esterne come MySQL. SQLite supporta SQL. | 13/05/10 Databases: SQLite Esempio con SQLite <?php <?php $username $username == 'user'; 'user'; $password = 'mypass'; $password = 'mypass'; $db $db == sqlite_open sqlite_open (( 'db.sqlite' 'db.sqlite' ); ); $sql_username = sqlite_escape_string $sql_username = sqlite_escape_string (( $username $username ); ); $sql_password $sql_password == md5 md5 (( $password $password ); ); $sql = "INSERT INTO users (username, $sql = "INSERT INTO users (username, password) password) VALUES ('$sql_username‘, '$sql_password')"; VALUES ('$sql_username‘, '$sql_password')"; sqlite_query sqlite_query (( $db, $db, $sql $sql )) or or exit exit (( 'ERROR' 'ERROR' ); ); | 10 | 13/05/10 Databases: SQLite La funzione sqlite_open() restituisce l’handle al database L’handle è utilizzato in molte altre funzioni SQLite | 11 sqlite_query() è la funzione che esegue le query SQL. Restituisce il result set Altre funzioni utili sono sqlite_num_rows(), sqlite_fetch_array(), e sqlite_fetch_all(). SQLite ha anche un’interfaccia OO | 13/05/10 Databases: MySQL | 12 MySQL è il database più popolare utilizzato con il PHP. Il vantaggio primario di MySQL è la velocità e la scalabilità. | 13/05/10 Databases: MySQL - accesso L'accesso al Database avviene attraverso le estensioni previste per il DB stesso I dati fondamentali per creare una connessione sono: - host - user - pw - database (schema) <?php <?php // // Connessione Connessione ee query query al al DB DB $conn = mysql_connect($dbhost, $conn = mysql_connect($dbhost, $dbuser, $dbuser, $dbpasswd); $dbpasswd); mysql_selectdb($dbname); mysql_selectdb($dbname); | 13 | 13/05/10 Databases: MySQL – check errors E' possibile controllare, per ogni fase, i possibili errori comunicati dal DB if(!$conn) if(!$conn) {{ die('connessione die('connessione non non riuscita'.mysql_error()); riuscita'.mysql_error()); }} | 14 | 13/05/10 Databases: MySQL - lettura L'esecuzione di una query all'interno del DB è l'esecuzione di una specifica istruzione di - lettura - cancellazione - aggiornamento - inserimento <?php <?php // // esecuzione esecuzione istruzione istruzione sql sql nel nel DB DB $sql = “SELECT * FROM utenti WHERE $sql = “SELECT * FROM utenti WHERE nome='$nome' nome='$nome' AND cognome='$cognome'"; AND cognome='$cognome'"; $risultato = mysql_query( $risultato = mysql_query( $conn, $conn, $sql); $sql); | 15 | 13/05/10 Databases: MySQL - cancellazione L'esecuzione di una query all'interno del DB è l'esecuzione di una specifica istruzione di - lettura - cancellazione - aggiornamento - inserimento <?php <?php // // esecuzione esecuzione istruzione istruzione sql sql nel nel DB DB $sql = “delete * FROM utenti WHERE $sql = “delete * FROM utenti WHERE codice='$cod'”; codice='$cod'”; $risultato = mysql_query($conn, $sql); $risultato = mysql_query($conn, $sql); | 16 | 13/05/10 Databases: MySQL - update L'esecuzione di una query all'interno del DB è l'esecuzione di una specifica istruzione di - lettura - cancellazione - aggiornamento - inserimento <?php <?php // // esecuzione esecuzione istruzione istruzione sql sql nel nel DB DB $sql = “update utenti set nome='$nome' $sql = “update utenti set nome='$nome' where where codice='$cod'”; codice='$cod'”; $risultato $risultato == mysql_query($conn, mysql_query($conn, $sql); $sql); | 17 | 13/05/10 Databases: MySQL - insert L'esecuzione di una query all'interno del DB è l'esecuzione di una specifica istruzione di - lettura - cancellazione - aggiornamento - inserimento <?php <?php // // esecuzione esecuzione istruzione istruzione sql sql nel nel DB DB $sql = “insert into utenti (codice, $sql = “insert into utenti (codice, nome, nome, indirizzo) indirizzo) values('$nome', '$cod', '$indir')”; values('$nome', '$cod', '$indir')”; $risultato $risultato == mysql_query($conn, mysql_query($conn, $sql); $sql); | 18 | 13/05/10 Databases: MySQL – retrieve data La lettura dei dati dal php avviene attraverso la specifica funzione prevista per il DB I dati verranno tornati dalla funzione in formato di array associativa <?php <?php // // Ricava Ricava ii dati dati if ($riga = mysql_fetch_assoc($risultato)) if ($riga = mysql_fetch_assoc($risultato)) {{ $profile1=$riga['campo1']; $profile1=$riga['campo1']; $profile2=$riga['campo2']; $profile2=$riga['campo2']; $profile3=$riga['campo3']; $profile3=$riga['campo3']; }} | 19 | 13/05/10 Databases: MySQL – retrieve data E' possibile “scorrere” l'intero record-set attraverso le normali funzioni php: - while() <?php <?php // // ciclo ciclo lettura lettura dei dei record record while ($row=mysql_fetch_assoc($ret)) while ($row=mysql_fetch_assoc($ret)) {{ print print "<tr>"; "<tr>"; print print "<td>".$row['name']."</td>"; "<td>".$row['name']."</td>"; print "<td>".$row['address']."</td>"; print "<td>".$row['address']."</td>"; print print "<td>".$row['city']."</td>"; "<td>".$row['city']."</td>"; print "</tr>"; print "</tr>"; }} | 20 | 13/05/10 Esercizio 20 | 21 Creare due file - entra.php e login.php. Creare una form HTML nel file entra.php che accetta username e password e li invia al file login.php. Nel file login.php, controllare che esista un record nella tabella users che abbia username uguale al nome utente inserito nella form HTML e password uguale alla password inserita nella form HTML. | 13/05/10 Esercizio 20: solution login.html: <form <form action="login.php" action="login.php" method="POST"> method="POST"> <p>Username: <input type="text" <p>Username: <input type="text" name="username" name="username" /></p> /></p> <p>Password: <input type="password" name="password" <p>Password: <input type="password" name="password" /></p> /></p> <p><input <p><input type="submit" type="submit" value="Log value="Log In" In" /></p> /></p> </form> </form> | 22 | 13/05/10 Esercizio 20: solution login.php: <?php <?php mysql_connect mysql_connect (( 'localhost', 'localhost', 'user', 'user', 'pass' 'pass' ); ); mysql_select_db ( 'mydatabase' ); mysql_select_db ( 'mydatabase' ); $user $user == mysql_real_escape_string mysql_real_escape_string (( $_POST $_POST ['username'] ['username'] ); ); $pass = mysql_real_escape_string ( $_POST ['password'] ); $pass = mysql_real_escape_string ( $_POST ['password'] ); $sql $sql == "SELECT "SELECT ** FROM FROM users users WHERE username WHERE username == '$user' '$user' AND password AND password == '$pass'"; '$pass'"; $result = mysql_query ( $sql $result = mysql_query ( $sql ); ); if (mysql_num_rows ( $result )) if (mysql_num_rows ( $result )) {{ /* /* Success Success */ */ }} | 23 | 13/05/10 QUESTION TIME ? Nome_____________ Nome_____________ Cognome______________ Cognome______________ Data___________ Data___________ ARRIVEDERCI TITOLO | 26 | 13/05/10