...Personalizza la tua HomePage...

Questa Sezione è Dedicata a Tutti i Webmaster Nofiti e Non

Versione Stampabile Versione PDF Versione .DOC Versione .ZIP Scrivimi i tuoi Commenti

La Struttura delle Query
Autore :   Linguaggio :  PHP - Hypertext Preprocessor
Data :  24/06/2004 09:18:35 Accessi :  2
Vedremo adesso com'è costruita generalmente una query da inviare al database.
Abbiamo visto nella precedente lezione una suddivisione molto generica fra query che richiedono informazioni e query che invece indicano modifiche da apportare.
In questa sezione faremo una distinzione più precisa indicando le query di uso più comune.
Ovviamente non prenderemo in considerazione tutte le possibili sintassi, che potete però trovare nella documentazione ufficiale sul sito www.mysql.com.

Innanzi tutto esaminiamo le query che vengono utilizzate per gestire la struttura del database:


CREATE:
Tramite questo comando possiamo creare database e tabelle.
Nel primo caso dobbiano solamente indicare il nome:

CREATE DATABASE IF NOT EXISTS db_name

db_name indica ovviamente il nome che vogliamo assegnare al database, mentre l'opzione facoltativa IF NOT EXISTS evita che venga visualizzato un errore nel caso la tabella esisa già.
Da notare che nella maggior parte dei casi di hosting, ci viene assegnato un database dal gestore e non possiamo crearne altri.
Tuttavia questa possibilità può essere comoda se possiamo gestire direttamente MySQL.
Per creare una tabella utilizziamo invece il generico comando:


CREATE TABLE IF NOT EXISTS tbl_name (definizioni)

Anche qui abbiamo la possibilità di usare l'opzione IF NOT EXISTS.
Le definizioni indicano i tipi di colonne di cui deve essere composta la tabella e la chiave primaria che verrà utilizzata.
Abbiamo già visto queste caratteristiche nelle prime lezioni di questa guida, quindi non ci tornerò un'altra volta.
Per fare un po' di esempi, una query per creare un database chiamato "mio_db" potrebbe essere:



CREATE DATABASE IF NOT EXISTS my_db

Una volta impostate le operazioni su quel database, vi creiamo una tabella (my_table) nella quale inseriamo due colonne: la prima un contatore id e la seconda una colonna nome (stringa di 20 caratteri):
CREATE TABLE my_table (id INT UNSIGNED NOT NULL AUTO_INCREMENT, nome varchar(20), primary key(id))


DROP:
Così come abbiamo creato database e tabelle, li possiamo eliminare: DROP DATABASE IF EXISTS db_name DROP TABLE IF EXISTS tbl_name E' consigliata la massima prudenza nell'usare questi comandi, visto che elminando un database o una tabella si elimina anche tutto il loro contenuto! Anche in questo caso IF EXISTS è facoltativo.


ALTER:
Una volta creata una tabella, possiamo modificarla inserendo, rimuovendo o modificarndo colonne: ALTER TABLE tbl_name ADD COLUMN definizione Con una query di questo tipo aggiungiamo la colonna specificata in "definizione" alla tabella "tbl_name".
La sintassi di "definizione" è uguale a quella usata per la creazione della tabella.
In fondo al comando possiamo aggiungere FIRST se vogliamo che la colonna inserita sia la prima o AFTER column_name per asseganre una posizione diversa.
Se non specifichiamo niente la colonna verrà inserita in ultima posizione.
Per fare un esemio inseriamo fra id e nome la colonna cognome:

ALTER TABLE my_table ADD COLUMN cognome VARCHAR(20) AFTER id Allo stesso modo possiamo eliminare una colonna:

ALTER TABLE my_table DROP COLUMN cognome Possiamo infine modificare il tipo di una colonna: ALTER TABLE tbl_name MODIFY colonna new_type In particolare per modificare la colonna nome da VARCHAR(20) a VARCHAR (30): ALTER TABLE my_table MODIFY nome VARCHAR(30)

Vediamo quindi le principali query per gestire il contenuto di un database:

INSERT:
Una volta creato un database dovremo popolarlo inserendo i record: INSERT INTO tbl_name (cols) VALUES (values) Anche di questa query abbiamo già visto la struttura nelle precedenti lezioni.


UPDATE:
Tramite questa funzione possiamo modificare alcuni valori di determinate righe: UPDATE tbl_name SET col_name=expr WHERE where_definition Questa notazione è piuttosto generale: tbl_name indica come sempre il nome della tabella, col_name=expr indica la modifica da apportare a una determinata colonna e where_definition indica le condizioni che si devono verificare in una riga perché questa possa essere modificata.
Per fare un esempio, possiamo assegnare il nome "Mario" a tutte le persone che hanno il cognome "Rossi":

UPDATE my_table SET nome='Mario' WHERE cognome='Rossi' Ovviamente possiamo indicare anche più condizioni tramite gli operatori OR o AND e possimao indicare più modifiche.
Queste possono essere sotituite da funzioni.
Per esempio possiamo anche creare la query:

UPDATE my_table SET id=id*1000, nome='Mario' WHERE (cognome='Rossi' OR cognome='Bianchi') AND id>5 Questa query più complicata ha lo scopo di cambiare il nome in Mario e di moltiplicare la colonna id per 1000.
A dire il vero questa operazione è pericolosa: id è chiave primaria e moltiplicare per mille si potrebbe ottenere un id già utilizzato.
In questo caso avremmo un errore.
La modifica viene apportata solo alle righe in cui cognome sia "Rossi" o "Bianchi" e comunque id sia maggiore di 5.
Tutta questa query non ha molto senso pratico, ma mostra bene parecchie possibilità...


DELETE:
Per eliminare una o più righe ci basta indicare le condizioni che devono verificarsi: DELETE FROM tbl_name WHERE condizioni Anche qui possiamo utilizzare condizioni composte:

DELETE FROM my_table WHERE id<1000 AND (nome='Mario' OR nome='Luigi')

SELECT:
Questo genere di query è quella che probabilmente utilizzerete più spesso, in quanto vi servirà per ricavare i dati precedentemente inseriti in una tabella: SELECT colonne FROM tbl_name WHERE condizioni opzioni In precedenza abbiamo già visto anche questa query, ma sarà meglio fare un ripasso: colonne indica tutte le colonne di cui vogliamo il valore.
Queste possono anche essere operazioni, come vedremo nell'esempio.
condizioni sono le condizioni che devono verificarsi, perché una riga sia visualizzata.
Queste sono dello stesso tipo di quelle viste nei casi UPDATE e DELETE.
opzioni ci serviranno per esempio per ordinare le righe.
Per fare un esempio:

SELECT id, cognome, nome, count(*) AS tot FROM my_table WHERE cognome='Rossi' ORDER BY nome, id DESC Con questa query otterremo una tabella composta da quattro colonne.
Le prime tre saranno quelle contenute nel database, mentre l'ultima conterrà un valore uguale per tutte le righe, cioè il numero di righe selezionate.
Se per esempio nel database ci sono 32 persone di cognome 'Rossi', allora quella colonna conterrà 32 volte il valore 32.
Infine abbiamo indicato che le righe devono essere ordinate per nome e in caso di nomi uguali per id decrescente.
Se vogliamo per esempio sapere tutti i cognomi presenti nel database usiamo l'opzione GROUP BY, grazie alla quale le righe vengono raggruppate in base al loro contenuto in una colonna:

SELECT cognome FROM my_table GORUP BY cognome Utilizzando quest'opzione eviteremo di avere cognomi uguali ripetuti.
Come condizione possiamo anche utilizzare il metodo di confronto LIKE.
Per esempio posso creare la query:

SELECT * FROM my_table WHERE cognome LIKE 'Ro%' OR nome LIKE '%ri%' L'asterisco indica che voglio selezionare tutte le colonne.
In seguito ho indicato di scegliere tutte le righe in cui il cognome inizi con "Ro" e finisca con qualunque sequenza di caratteri (indicata con il simbolo %),oppure il cui nome contenga "ri" (e possa quindi iniziare e finire con qualunque stringa).


Altre funzioni PHP-Mysql

PHP contiene molte funzioni e, per non confondere troppo le idee, vi proponiamo un semplice elenco di quelle più importantanti impegnandoci nel breve futuro a proporvi altra guide pià approfondite solo sul Mysql:

mysql_num_rows()
Restituisce il numero di righe interessate dall'istruzione SQL:

<?php
// mysql_num_rows

$dati = mysql_query("SELECT * FROM mail");
$numero_righe = mysql_num_rows($dati);

?>


mysql_insert_id()
Restituisce l'ultimo id ( se presente ) della riga interessata dall' ultima operazione di INSERT:

<?php
// mysql_insert_id

$dati = mysql_query("INSERT INTO mail (id_utente, nome_cognome, mail values ('2', 'Mario Rossi', mario@tiscalinet.it') ");
$ultimo_id = mysql_insert_id();

?>


mysql_drop_db
Elimina un database Mysql:

<?php
// mysql_drop_db

mysql_drop_db("nome_database_da_eliminare");

?>


mysql_list_dbs
Restituisce la lista dei database presenti nel server Mysql:

<?php
// mysql_list_dbs

$connessione = mysql_connect($host, $user, $password);
mysql_list_dbs("$connessione");

?>


mysql_list_tables
Restituisce la lista delle tabelle presenti nel database selezionato:

<?php
// mysql_list_tables

mysql_list_tables("nome_database");

?>


Questo l'elenco delle funzioni più usate, potete trovare l'elenco completo delle funzioni sul sito del PHP www.php.net nella sezione funzioni per Mysql

Manipolazione dati

Le ultime importanti nozioni sulla manipolazione dei dati inseriti nel database riguardano la modifica e la cancellazione dei dati.
A questo scopo, rispetto agli script visti precedentemente riguardo l'inserimento cambiano solo le istruzioni SQL.
Per la modifica utilizzeremo l'istruzione UPDATE mentre per la cancellazione l'istruzione DELETE.


Consiglio vivamente di utilizzare queste due istruzioni con cautela per non rischiare di cancellare o modificare tutti i dati che avete inserito all'interno della tabella.


La modifica:

<?php
// script per la modifica dei dati nella tabella mail
// supponiamo di essere già connessi al database

$dati = mysql_query ("UPDATE mail SET mail='mario@tiscalinet.it' WHERE nome_cognome='MARIO ROSSI'");

// fine script

?>


L'istruzione UPDATE è molto semplice, ricordate sempre di specificare il WHERE perchè altrimenti la modifica verrà eseguita in tutti campi della tabella mail ( per questo consiglio l'uso con cautela ).


Vediamo la sintassi dell'istruzione UPDATE:

UPDATE nome_tabella SET nome_colonna='nuovo_valore' WHERE nome_colonna='identificativo_colonna';

Nella creazione della tabella abbiamo all'inizio previsto una colonna che contiene l'dentificativo numerico del campo.
Questo indice è importantissimo per le istruzioni di modifica e di cancellazione perchè in questo modo ogni riga ha un numero univoco e non si rischia di cancellare/modificare altre righe.
Utilizzando l'identificativo avremo scritto:

<?php
// script per la modifica dei dati nella tabella mail
// supponiamo di essere già connessi al database

$dati = mysql_query ("UPDATE mail SET mail='mario@tiscalinet.it' WHERE id_utente='1'");

// fine script

?>


Molto più semplice e senza rischio d'errore ( pensate se ci fossero stati due Mario Rossi all'interno della tabella mail).


L'istruzione DELETE permette di cancellare un intera riga dalla tabella.
Utilizzate questa istruzione con molta cautela in quanto Mysql non chiede conferme, neanche per la cancellazione di grosse quantità di dati:

<?php
// script per la cancellazione di tutti i dati nella tabella mail
// supponiamo di essere già connessi al database

$dati = mysql_query ("DELETE FROM mail");

// fine script

?>


Con questo script cancelliamo tutte le righe presenti all'interno della tabella mail.
Nel caso volessimo cancellare una determinata riga inseriremo nell'istruzione SQL l'istruzione WHERE, come segue:

<?php
// script per la cancellazione di una riga nella tabella mail
// supponiamo di essere già connessi al database

$dati = mysql_query ("DELETE FROM mail where id_utente='1'");

// fine script

?>


Questo script cancellerà la riga in cui l'id_utente è uguale a 1.



Manipolazione dati: lettura, inserimento

Ora che abbiamo creato la nostra tabella possiamo iniziare ad inserire i dati.
Ripeto che stiamo cercando di costruire un database che memorizzi tutti gli indirizzi e-mail di coloro che si iscrivono.
Nelle precedenti lezioni abbiamo costruito una tabella formata da tre colonne: la prima che memorizza un numero identificativo per ogni dato che inseriremo, la seconda che memorizza il nome e il cognome dell'utente e la terza serve per l'indirizzo e-mail.
Vediamo ora i comandi SQL e le funzioni PHP per inserire i dati.


<?php
// script per inserire i dati nella tabella mail
// per comodità supponiamo di esserci già connessi al database
// voglio inserire 1 nuovi indirizzi, scriveremo:

mysql_query("insert into mail (id_utente, nome_cognome,mail) values ('1','Mario Rossi','mario@suosito.com')");

// fine script

?>


Con questo piccolo script abbiamo inserito un nuovo indirizzo all'interno della tabella mail.
Non bisogna specificare a Mysql di creare un nuovo campo in quanto questo avviene in automatico con l'uso dell'istruzione SQL "insert into".


Vi voglio riproporre la sintassi dell'istruzione INSERT INTO perchè è una delle istruzioni più utilizzate e la più complessa perchè molto articolata:

INSERT INTO nome_tabella (nome_campi) values ( dati_da_inserire_nei_campi);

Notate che l'elenco dei dati presente nella seconda coppia di parentesi tonde deve corrispondere all'ordine dei campi che abbiamo inserito nella coppia delle prime parentesi.
Ripetermo lo script tutte le volte che dobbiamo inserire un nuovo campo.


Ora che la nostra tabella contiene qualche dato possiamo leggere al suo interno per sapere quali dati ci sono al suo interno, per far questo utilizzeremo l'istruzione SQL "SELECT":

<?php
// script per leggere i dati contenuti in un campo della tabella
// mail
// per comodità supponiamo di esserci già connessi al database

$dati = mysql_query("select * from mail");
$array = mysql_fetch_array($dati);

// fine script

?>


L'istruzione SELECT chiede i dati di una riga della tabella che abbiamo selezionato nell'istruzione FROM ( nel nostro caso la tabella si chiama mail ).
Per poter utilizzare i dati che Mysql invia dobbiamo utilizzare la funzione mysql_fetch_array che crea un array associativo che ha come indice il nome delle colonne, continuando lo script avremo che per visualizzare i dati che abbiamo estrapolato dal database scriveremo:

<?php
// codice per leggere i dati contenuti in un campo

print "Contenuto della colonna id_utente: $array[id_utente] ";
print "Contenuto della colonna nome_cognome: $array[nome_cognome] ";
print "Contenuto della colonna mail: $array[mail] ";

?>


Naturalmente questo script legge una riga per volta e se nella istruzione SELECT non selezionate nulla Mysql restituirà i dati dell'ultima riga inserita, diversamente potete controllare il flusso dei dati Mysql con l'istruzione WHERE:

<?php
// Volendo visualizzare i dati dell'utente Mario Rossi avrei scritto
// in questo modo l'istruzione SQL

$dati = mysql_query("SELECT * FROM mail WHERE nome_cognome='Mario Rossi");
$array = mysql_fetch_array($dati);

// fine script

?>


Nella nostra lingua l'istruzione SQL risulterebbe così organizzata:
"Seleziona (SELECT) tutto (*) dalla tabella ( FROM ) mail dove ( WHERE ) il la colonna nome_cognome è uguale a Mario Rossi.


Questo script va bene nel caso dovessimo leggere solo una riga della tabella, nel caso in cui vogliamo invece leggere tutto il contenuto della tabella dovremo aggiungere un ciclo while così organizzato:

<?php
// script per leggere i dati contenutiin tutti i campi della tabella
// mail
// per comodità supponiamo di esserci già connessi al database

$dati = mysql_query("select * from mail");
while ( $array = mysql_fetch_array($dati)) {
print "Contenuto della colonna id_utente: $array[id_utente] ";
print "Contenuto della colonna nome_cognome: $array[nome_cognome] ";
print "Contenuto della colonna mail: $array[mail] ";
};

// fine script

?>


Con questo script finchè la tabella mail non sarà vuota PHP creerà l'array associativo contenente i dati letti dal database.

Ritorna


 NEWS 
12/09/2007 13:08:14
PAURA
Marco Travaglio con Gomez e Crozza ed Elio

11/09/2007 14:44:48
IL V-DAY: un evento NUOVO !!!!!
Aria fresca in Parlamento articolo del Sole24ore: http://www.ilsole24ore.com/art/SoleOnLine4/At...


28/06/2007 14:20:55
LEOPARDI SALUTI i 500
Certo ragazzi, anche noi nel nostro piccolo cresciamo, e Leopardi è il cinquecentesimo saggio nella ...


12/04/2007 11:31:15
ATTENZIONE A CheckMessenger.NET! , è una TRUFFA
Ennesito sito truffaldino: si chiama CheckMessenger e vi promette di mostrarvi se i vostri contatti ...


26/01/2007 11:58:34
AGGIORNATE TUTTE LE SEZIONI
AGGIORNATE TUTTE LE SEZIONI Sì, cari amici. Ho provveduto ad aggiornare le principali sazioni de...


:: ELENCO NEWS ::

  
Valid XHTML 1.0! Valid CSS!