====== Query di selezione ====== [[php:php|Pagina principale del PHP]] La query si selezione consente di selezionare informazioni presenti nelle tabelle di una base di dati. La query di selezione è l'unica query che non altera lo stato del database. ===== Sintassi MySql ===== La sintassi della SELECT è la seguente: SELECT listaCampi FROM nomeTab WHERE condizioni * **listaCampi**: è la lista dei campi della tabella che vogliamo selezionare, se li vogliamo selezionare tutti si può usare i carattre jolly ** * ** * **nomeTab**: nome della tabella sulla quale vogliamo operare * **condizioni**: condizioni sui campi E' prassi scrivere le parole dell'SQL in maiuscolo. Supponiamo di avere la seguente tabella __utenti__ : ^id^username^email^password^ |1|campione88|campione88@libero.it|1234qwer| |2|lollo|lollo234@gmail.com|superPWD75!!| |3|cippaLippa|albertoScala@gmail.com|pallino!!| |5|malibuStacy|lisa.s@hotmail.com|sassofono| |6|malibuStacy2|waylon@smithers.name|eccellente| Solitamente in una tabella di untenti la password non è in chiaro. Nelle tabelle solitamente c'è un campo che individua univocamente una riga, questo campo speciale è detto **chiave primaria**. Nella nostra tabella la chiave è il campo id. SELECT id,email FROM utenti WHERE username = 'lollo' AND password='superPWD75!!' **Il risultato di una query di slezione è UNA TABELLA**. Quello che c'è tra SELECT e FROM definisce il numero di colonne della **tabella** riusltato, le condizioni scritte nel WHERE incidono sul numero di righe. __In generale non sappiamo quante sono le righe della **tabella** risultato della query__. La query scritta sopra avrà il seguente risultato: ^id^email^ |2|lollo234@gmail.com| E' una **tabella** con due colonne e una riga. Una query può produrre una tabella con **zero righe**. Può accadere sia quando la tabella è vuota sia quando le condizioni del WHERE non vengono soddisfatte da nessua riga. ===== Query di selezione nel PHP ===== Per lanciare una SELCT usando il PHP, bisogna utilizzare la funzione **mysqli_query()**. Prima di eseguire una query si deve aprire la connessione con il server. //apriamo la connsessione $link = mysqli_connect('127.0.0.1','root','','utenti'); //definiamo la query come una stringa $query = "SELECT id,email FROM utenti"; //selzioniamo per intero le colonne id e email //lanciamo la query e memorizziamo il risultato $res=mysqli_query($link,$query); //se la query va a buon fine dentro $res c'è una tabella //se la query è scritta male dentro $res c'è false if(!$res) die('Qualcosa è andato storto'); //die blocca l'esecuzione del codice //se sono qui la query è scritta bene if(mysqli_num_rows($res)>1){ //mysqli_num_rows mi dice quante righe ci sono in $res //c'è almeno una riga while ($row=mysqli_fetch_assoc($res){ //mysqli_fetch_assoc prende l'attuale riga di $res e la inserisce in un array associativo //fatto questo si posiziona sulla riga successiva //quando le righe sono finite torna false echo $row['id'].' '.$row['email']; //gli indici dell'array associativo sono i nomi dei campi sulla tabella } } else { echo "la query non ha prodotto risultati"; } Come detto il risultato di una SELECT è una tabella, quindi in $res c'è una tabella. Il PHP non può gestire una tabella tutta insieme, quindi si scorre la tabella una riga alla volta e si tratta ogni singola riga come un array associativo. La gestione di una query di selezione avviene sempre nello stesso modo, quello che può cambiare è la query stessa, in base alla query ci si può aspettare un numero di risultati più delimitato.