Per cominciare

Gli argomenti di questa pagina

  • Il necessario per lavorare col DB
  • Connessione al DB
  • Uso di funzioni personali per lavorare col DB
  • Le Query
  • Esempio Query SELECT
  • Esempio Query INSERT
  • Esempio Query UPDATE
  • Esempio Query DELETE
  • La funzione MYSQL mysql_affected_rows()

I concetti principali sui DB li abbiamo già visti nelle due pagine introduttive al settore quindi qui possiamo entrare subito nel merito del nostro studio.

Il necessario per lavorare col DB

Innanzitutto verificare che esista il file che contiene i dati di connessione al DB.
In questo file verranno indicate le sole quattro variabili necessarie a stabilire la connessione al DB prima di compiere qualsiasi azione ed è questo file che includeremo in tutte le pagine che debbono lavorare col DB. Questi dati vengono forniti dall'host che abbiamo scelto per il nostro sito.

Il file db_login.php
1
2
3
4
5
6
<?php
$Host 
"hostname";
$User "username";
$Password "password";
$DBName "DBName";
?>

Questo che segue è un frammento di codice che sarà necesario per eseguire la connessione al DB ed alla esecuzione delle Query.

Questo frammento di codice va inserito nella pagina che deve eseguire operazioni col DB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n";
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n";
    } else {
        
mysql_set_charset("utf8"); 
        
//    esecuzione della Query
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            echo 
"Query eseguita<br />\n";
            
//    qui vengono eseguiti altri eventuali lavori
        
}
    }
}
@
mysql_close ($Link);
?>

Se si apre una connessione a MySQL all'interno del file PHP è possibile chiuderla con la funzione mysql_close(). Anche se non tutti i programmatori usano chiudere esplicitamente la connessione perchè lo trovano inutile, in quanto le connessioni MySQL sono solitamente chiuse per default alla fine dello script, è buona norma fare in modo che tutte le risorse vengano liberate dopo l'utilizzo del DB, usando la funzione mysql_close(). Ciò assicurerà che la connessione venga chiusa nella linea esatta nello script in cui si dice di chiudere.

Chiusura della connessione al DB
1
2
3
<?php
mysql_close 
($link);
?> 

Connessione al DB

Prima di iniziare ad eseguire qualsiasi operazione col DB è necessario eseguire alcuni passi preliminari qui di seguito mostrati molto semplicemente e semplicisticamente:

1
2
3
4
5
6
7
8
<?php
include ('res/db_login.php'); 
$link mysql_connect($Host$User$Password);
mysql_select_db($DBName);
mysql_set_charset("utf8");
//    altre operazioni
mysql_close ($link); 
?>

I passi sono semplici:

  • Connessione al DB con le proprie credenziali
  • Selezione del DB
  • le operazioni che si possono compiere in questo spazio sono molteplici ed anche ripetute più volte prima della chiusura della connessioner
  • chiusura della connessione

Uso di funzioni personali per lavorare col DB

Per eseguire operazioni col DB è sufficiente usare il frammento di codice presentato qui sopra oppure, se il lavoro col DB viene eseguito in modo intensivo ed in più pagine, è possibile crearsi un file che qui viene chiamato res.php e che metteremo nella cartella res. In questo file scriveremo tutte le funzioni personali di cui avremo bisogno come mostrato qui in basso e poi lo includerlo nelle pagine come fatto per il db_login.php.
L'uso della funzione personale consente di snellire il codice nelle nostre pagine e dinimuisce la possibilità di commettere errori.

Anche se in molti casi è da non ricorrere all'uso dell'istruzione global per rendere globale la visibilità delle variabili nelle funzioni per evitare spiacevoli conseguenze a causa di accidentali manipolazioni a cui queste, in questo caso possiamo soprassedere perchè nella funzione non c'è alcuna manipolazione di variabili.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
function db_connect() {
    global 
$Host;
    global 
$User;
    global 
$Password;
    global 
$DBName;
    if (!
$link mysql_connect($Host$User$Password)) {
        echo 
mysql_error() . "<br />\n";
        return 
FALSE;
    }
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n";
        return 
FALSE;
    }
    
mysql_set_charset("utf8");
    return 
$link;
}
function 
all_fields($table) {
    
$columns = array();
    
$Query "SHOW COLUMNS FROM " $table;
    
$result mysql_query($Query);
    while(
$row mysql_fetch_array($result)) {
        
$columns[] = $row[0];
    }
    return 
$columns;
}
?>

Nelle nostre pagine, dopo aver incluso il il file db_login.php coi dati per la connessione ed il file res.php con le altre nostre funzioni personali, possiamo eseguire tutte le connessioni che vogliamo semplicemente chiamando la funzione come mostrato nel codice qui in basso.
A partire dalla riga commentata è possibile eseguire tutte le Query che riterremo opportune.

E' da notare che richiamando la funzione personale db_connect() e chiudendo la connessione ho usato la chiocciolina ( @ ). Questo per evitare che in caso di errori durante la connessione al DB vengano mostrati messaggi tipo:
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'xxxxxx' (11004) in ####### on line ###
ma vengano mostrati solo nostri i nostri eventuali messaggi.
La chiocciolina (@ ) è un operatore di silence che il PHP ci mette a disposizione per evitare la visualizzazione di messaggi di errore di sistema, a volte troppo loquaci e che è bene nascondere ad eventuali utenti maliziosi. Essa va anteposta alla riga che potrebbe causare un errore.

Ecco un esempio di come usare le nostre funzioni personali a cui faremo riferimento ogni volta lo riterremo necessario.
Mentre la prima funzione viene chiamata senza alcun argomento - db_connect() -, per attivare la seconda funzione c'è bisogno di passare il nome della tabella come argomento - all_fields($table) -.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include ('res/db_login.php');
include (
'res/res.php');
$table "sql_libri";
if (@
$Link db_connect()) {
    
$fields all_fields($table);
    echo 
"I campi della tabella " $table "<br />\n";
    echo 
implode(", "$fields);
} else {
    echo 
"Si sono verivicati problemi col DB<br />\n";
}
@
mysql_close ($Link);
?>

I campi della tabella sql_libri
id, gruppo, codice, Titolo, Autore, prezzo, quantita

Le Query

Le Query rappresentano il motore di interfacciamento col DB. Esse sono le richieste che vengono inoltrate al database e possono essere di diversi tipi ma, fondamentalmente sono di due tipi:

  • Query di lettura (SELECT, SHOW TABLES, SHOW COLUMNS, DESCRIBE, ecc)
  • Query si scrittura (INSERT, UPDATE, CREATE TABLE, ALTER TABLE, RENAME TABLE, ecc)

Se tra le Query di scrittura, nella maggior parte dei casi è sufficiente eseguire la query senza far altro, tra le Query di lettura esistono diversi metodi per mostrare ciò che si intende leggere, quindi, qui di seguito, tra tutte, vedremo come:

  • Leggere un record con una Query SELECT
  • Scrivere un record con una Query INSERT
  • Modificare un record con una Query UPDATE

Esempio Query SELECT

Questa è una Query per leggere il contenuto di una tabella e di seguito viene mostrato il modo per leggere e mostrarne il contenuto.

La Query per leggere una tabella
1
2
3
4
<?php
$Query 
"SELECT *
FROM sql_citta"
;
?>

Il codice per la esecuzione della Query e visualizzazione dei dati è molto semplificata.
eseguo la Query con $result = mysql_query($Query);
ho aggiunto alcune funzioni a volte molto utili:
lettura del numero di record restituiti dalla Query con $num_row = mysql_num_rows($result);
Lettura del numero di campi che restituisce la Query con $numfields = mysql_num_fields($result);
Lettura dei nomi dei campi con mysql_field_name($result, $i);
Infine restituisce il resultset con mysql_fetch_array($result)
che, con un ciclo basato su WHILE, restituisce i valori letti.

Codice per la lettura dei dati
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        if (
$result mysql_query($Query)) {
            
$num_row mysql_num_rows($result);
            
$numfields mysql_num_fields($result);
            
$fields = array();
            for (
$i=0$i $numfields$i++) {
                
$fields[] = mysql_field_name($result$i);
            }
            if (
$num_row 0) {
                echo 
$num_row " record letti<br />\n";
                echo 
"<table class=\"tabella_it\">\n";        
                echo 
"<tr>\n";
                for (
$i=0$i $numfields$i++) {
                    echo 
"<th>" $fields[$i] . "</th>\n";
                }
                echo 
"</tr>\n";
                while (
$row mysql_fetch_array($result)) {
                    echo 
"<tr>\n";
                    for (
$i=0$i $numfields$i++) {
                        echo 
"<td>";
                        echo 
is_null($row[$fields[$i]]) ? 'NULL' $row[$fields[$i]];
                        echo 
"</td>\n";
                    }
                    echo 
"</tr>\n";
                }
                echo 
"</table>\n";
            } else {
                echo 
"Nessun record restituito<br />\n";
            }
        } else {
            echo 
mysql_error() . "<br />\n"
        }
    }
}
mysql_close ($link);

Esempio Query INSERT

Con la seguente Query si inserisce un record in una tabella

La Query per inserire un record in una tabella
1
2
3
4
5
6
<?php
$Query 
"INSERT INTO sql_citta 
(id, cap, citta, prov)
VALUES 
(NULL , '45678', 'Topolinia', 'TP');"
;
?>

Questa Query viene eseguita con questo semplice codice.
Oltre alla solita esecuzione della Query $result = mysql_query($Query);, ho messo una comoda funzione per mostrare il numero di rige inserite: mysql_affected_rows();

Il codice per eseguire la Query per inserire un record
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            
$rows_modified mysql_affected_rows();
            echo 
$rows_modified " righe interessate<br />\n";
        }
    }
}
mysql_close ($link);
?>

Esempio Query UPDATE

Con la seguente Query si intende modificare un record già presente in una tabella

La Query per modificare un record in una tabella
1
2
3
4
5
6
<?php
$Query 
"UPDATE test_sql_citta 
SET citta = 'Paperopoli',
prov = 'PP' 
WHERE id =2 LIMIT 1 ;"
;
?>

Questa Query viene eseguita con questo semplice codice.
Oltre alla solita esecuzione della Query $result = mysql_query($Query);, ho messo una comoda funzione per mostrare il numero di rige inserite: mysql_affected_rows();

Il codice per eseguire la Query per modificare un record
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            
$rows_modified mysql_affected_rows();
            echo 
$rows_modified " righe interessate<br />\n";
        }
    }
}
mysql_close ($link);
?>

Esempio Query DELETE

Con la seguente Query si intende eliminare un record da una tabella.
Ma attenzione: la clausola WHERE consente di limitare l'azione demolitrice ai soli record che soddisfano la condizione. Se si omette la clausola WHERE vengono cancellati tutti i record della tabella.

La Query per modificare un record in una tabella
1
2
3
4
<?php
$Query 
"DELETE FROM test_sql_citta 
        WHERE test_sql_citta.id = 1 LIMIT 1"
;
?>

Anche questa Query viene eseguita con questo semplice codice.
Oltre alla solita esecuzione della Query $result = mysql_query($Query);, ho messo una comoda funzione per mostrare il numero di rige inserite: mysql_affected_rows();

Il codice per eseguire la Query per modificare un record
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            
$rows_modified mysql_affected_rows();
            echo 
$rows_modified " righe interessate<br />\n";
        }
    }
}
mysql_close ($link);
?>

La funzione MYSQL mysql_affected_rows()

Come si vede negli script qui sopra con le Query INSERT, UPDATE e DELETE è possibile ottenere il numero di righe coinvolte nell'ultima Query eseguita.
La funzione mysql_affected_rows() non funziona con l'istruzione SELECT ma solo con le istruzioni sopra indicate. Per ricavare il numero di righe restituite da SELECT, come è stato visto più sopra, occorre usare mysql_num_rows().

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum