Tutorial PHP e MYSQL – Connessione e gestione di un database – Select, insert, update, delete – parte 01

Su Sir Bit vengono trattati spesso articoli che presumono una conoscenza di base del rapporto tra php e mysql.
Conoscere come il php si interfaccia al mysql, come aprire una connessione e come inserire, modificare ed eliminare record da un database è essenziale in un sito internet che si basa su questi due linguaggi di programmazione.

Lo scopo di questo articolo è quindi di dare un’infarinatura di base (ma completa) su come gestire un database mysql attraverso il php. Di conseguenza, per chi è già rodato questo articolo sarà utile più che altro come promemoria in caso di incertezze.
Alla fine di questo tutorial dovreste essere in grado di gestire in autonomia un sito dinamico che si appoggia su un database di tipo mysql.
Si danno per scontate alcune conoscenze elementari: l’uso di php, come costruire un sito in php e la capacità di creare tabelle in un database mysql (basta anche l’uso del diffuso phpmyadmin).

Nello specifico vedremo:
– funzioni di connessione al database, con controllo degli errori;
– funzioni di inserimento, modifica e cancellazione di record dal database;
– funzioni legate all’ordinamento dei dati estratti;
– come estrarre solo determinati record, in base a una determinata stringa, oppure estrarre solo un certo numero di record;
– funzioni php di base utili durante la gestione del database.

Gli esempi saranno commentati dove necessario.

Connessione e struttura di base

Il database su cui andremo a lavorare avrà questa semplice struttura (copiatelo e importatelo nel vostro database):

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `clienti` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(255) NOT NULL DEFAULT '',
  `citta` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `clienti` (`id`, `nome`, `citta`) VALUES
(1, ' Mario Rossi', 'Milano'),
(2, 'Lara Verdi', 'Roma'),
(3, 'Giacomo Bianchi', 'Napoli');

La prima cosa da fare è richiedere al gestore del dominio su cui avete il sito i parametri di connessione: host, user, password e nome del database.
In php salveremo queste informazioni in variabili, rispettivamente:

1
2
3
4
$db_host="localhost";
$db_user="nome_utente";
$db_password="password";
$db_database="nome_database";

Seguirà quindi la connessione vera e propria al database. E’ utile eseguire dei controlli di base per verificare che la connessione avvenga; in caso contrario, manderemo a schermo un messaggio di errore tramite la funzione die(), che bloccherà l’esecuzione degli script della pagina.

1
2
3
4
5
6
7
//connessione
$db = mysql_connect($db_host, $db_user, $db_password);

if ($db == FALSE)
	die ("Errore nella connessione. Verificare i parametri nel file di configurazione");
mysql_select_db($db_database, $db)
	or die ("Errore nella selezione del database. Verificare i parametri nel file di configurazione");

Estrarre i record dal database

La sintassi base per interrogare una tabella ed estrarre il contenuto dei suoi campi è la seguente:

1
2
$q="SELECT * FROM clienti";
$query=mysql_query($q, $db);

La due righe qui sopra possono essere riunite in un’unica riga:

1
$query=mysql_query("SELECT * FROM clienti", $db);

è una pratica che però sconsiglio ai principianti, perché nel primo caso avrete modo di stampare la query a schermo (echo $q) in caso di errori, in modo da “spulciarla” in ogni suo punto.
Il secondo parametro ($db) in questo caso è opzionale e può essere tolto: servirebbe nel caso di connessioni a più database, in modo da sapere a quale fare riferimento.

Con questa query abbiamo estratto i record di tutti i campi della tabella clienti. Se avessimo voluto estrarre solo l’id e il nome dei clienti, la query andrebbe così modificata:

1
$q="SELECT id, nome FROM clienti";

A questo punto, però, come faccio a recuperarli e a stamparli a schermo? Vediamo prima il codice, che poi spiegherò nei dettagli.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$num=mysql_num_rows($query); //numero totale di record trovati con la query

//se sono stati trovati dei record, allora stampo la tabella che li contiene
if($num>0){
	echo "<table border='1'>";

	while($row=mysql_fetch_array($query)){
		$id=$row["id"];
		$nome=$row["nome"];
		$citta=$row["citta"];
		echo "<tr>";
			echo "<td>".$id."</td>";
			echo "<td>".$nome."</td>";
			echo "<td>".$citta."</td>";
		echo "</tr>";
	} 

	echo "</table>";
}

La funzione mysql_num_rows() calcola il numero di record estratti attraverso la query passata (nel nostro caso è resa con la variabile $query).
L’if di controllo ($num>0) ci permette di evitare la stampa nel caso in cui non siano stati trovati record.

Il punto chiave della stampa è il ciclo while. Unito alla funzione mysql_fetch_array() ci permette di passare ricorsivamente i vari record estratti, immagazzinando i valori nell’array $row[].
A questo punto, ci basta richiamare la chiave dell’array (il nome del campo della tabella) per estrarre il suo valore. Per esempio, $row["nome"] contiene i valori del campo “nome” di ogni singolo record; nell’esempio, a ogni ciclo di while conterrà:
ciclo 1: $row["nome"]="Mario Rossi";
ciclo 2: $row["nome"]="Lara Verdi";
ciclo 3: $row["nome"]="Giacomo Bianchi";

Se la query avesse estratto un solo record, avremmo potuto togliere il while e scrivere semplicemente:

1
$row=mysql_fetch_array($query);

Il funzionamento sarebbe lo stesso.

Estrarre record specifici: where, order by, limit

Nell’esempio base di prima abbiamo estratto tutti i record indiscriminatamente. Ma se volessi estrarre soltanto il record che ha il valore id=2 nella tabella? Oppure solo i record che contengono la scritta “Bianchi” nel campo nome?
La sintassi del mysql ci permette di selezionare ed estrarre solo i campi con determinati valori. Se per esempio volessi estrarre il record che ha id=2:

1
$q="SELECT * FROM clienti WHERE id=2";

Per estrarre il record che ha valore ‘Milano’ nel campo citta:

1
$q="SELECT * FROM clienti WHERE citta='Milano'";

Notate che il valore, in questo caso, è racchiuso da apici singoli: sono indispensabili quando agiamo su un campo che prende come valore una stringa.

Facciamo un passo avanti. Proviamo adesso a estrarre qualsiasi record che contenga, nel campo nome, la stringa ‘como’:

1
$q="SELECT * FROM clienti WHERE nome LIKE '%como%'";

In questo caso saranno presi tutti i record che, nel campo nome, conterranno la parola ‘como’ in qualsiasi punto della stringa: non ha importanza cosa ci sia a destra e a sinistra. Nel nostro esempio, sarà estratto solo il terzo record (‘giaCOMO bianchi’).

Nella nostra tabella abbiamo pochi record, ma nei grandi database potremmo avere anche migliaia di valori. Ci sarà quindi utile sapere come ordinarli in base al campo voluto e come estrarre solo un determinato numero di record.

Iniziamo dall’ordinamento:

1
$q="SELECT * FROM clienti ORDER BY nome";

in questo caso saranno estratti tutti i record e presi in ordine alfabetico. Per estrarli in ordine alfabetico inverso:

1
$q="SELECT * FROM clienti ORDER BY nome DESC";

Ancora, è possibile estrarre i record in posizioni casuali:

1
$q="SELECT * FROM clienti ORDER BY RAND()";

Infine, occupiamoci di estrarre un numero specifico di record:

1
$q="SELECT * FROM clienti LIMIT 0,2";

Il primo valore del limit indica il punto di partenza (a partire dal valore 0), il secondo valore indica quanti record prendere. In questo caso saranno estratti solo i primi due record (nel nostro database, quelli con id=1 e id=2).
La seguente query, invece, estrae il secondo e il terzo record, ignorando il primo:

1
$q="SELECT * FROM clienti LIMIT 1,2";

Le opzioni che abbiamo appena visto possono essere combinate tra loro:

1
$q="SELECT * FROM clienti WHERE nome LIKE '%como%' ORDER BY RAND() LIMIT 0,2";

Nel nostro esempio avremo sempre e comunque un solo record, ma in database con centinaia di record ci tornerà parecchio utile. In pratica, prende i campi che hanno nel campo nome la stringa ‘como’, li ordina casualmente ed estrae i primi due.
Tenete presente che i parametri vanno posti esattamente nell’ordine qui sopra (where, order, limit): in caso contrario darà un errore alla query.

Nel prossimo articolo completeremo il tutorial, analizzando il sistema per inserire un nuovo record (insert), modificare un record già presente nel database (update) o eliminarlo (delete).

Etichette:, ,
Ultimi Commenti
  1. paolo
  2. Cri

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *