Informazioni sui campi
Gli argomenti di questa pagina
|
Prima di iniziare
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.
1
|
<?php
|
Questo che segue è un frammento di codice che sarà necesario per eseguire la connessione al DB ed alla esecuzione delle Query.
1
|
<?php
|
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.
1
|
<?php
|
Elenco dei campi di una tabella
Ottenere l'elenco dei campi di una tabella è semplice ed è possibile usare due clausole differenti:
SHOW COLUMNS
DESCRIBE
Entrambe restituiscono lo stesso risultato. Per estrarre i nomi dei campi, quando si scorre il resultset restituito dalla query è sufficiente estrarre il primo elemento individuato tramite l'indice 0 (zero).
In realtà la Query qui sotto mostrata restituisce molte altre proprietà dei campi della tabella:
Field, Type, Null, Key, Default, Extra
Per questo nello script qui in basso viene estratto solo l'elemento con indice 0 (zero).
Le due Query per leggere le colonne
1
|
<?php
|
L'esecuzione delle due Query
1
|
<?php
|
Ecco cosa si ottiene eseguendo una delle due Query
Elenco e numero dei campi da una Query con la funzione mysql_field_name() e mysql_num_fields()
Con la funzione SHOW COLUMNS vengono estratti tutti i campi di una tabella MYSQL.
Con la funzione mysql_field_name() possiamo estrarre i campi coinvolti da una Query SELECT.
La sintassi è semplice.
La funzione mysql_field_name() il nome del campo indicato da un indice. Per avere l'elenco dei campi coinvolti in una Query, occorre eseguire la Query con
$result = mysql_query($Query)
Poi possiamo agire sul resultset memorizzato nella variabile
$result prima per conoscere il numero di campi letti con
$numfields = mysql_num_fields($result)
Poi con un ciclo basato sul numero di record possiamo leggere i nomi dei campi con
$field = mysql_field_name($result, $i)
Qui sotto vediamo come queste due funzioni di comportano don due differenti Query.
1
|
<?php
|
Questi sono i risultati ottenuti con le due differenti Query
1
|
<?php
|
Questi sono i risultati ottenuti con le due differenti Query
id, cap, citta, prov
2 campi restituiti dalla Query SELECT citta, prov FROM sql_citta
citta, prov
Come è stato detto qui sopra, la Query SHOW COLUMNS, oltre all'elenco dei campi di una tabella, restituisce anche altre informazioni sui campi della tabella. Queste informazioni le possiamo ottenerle con due istruzioni equivalenti.
Struttura tabella con SHOW COLUMNS o con DESCRIBE
SHOW COLUMNS e l'altra istruzione simile DESCRIBE visualizzano informazioni sulle colonne di una tabella.
L'istruzione MYSQL SHOW COLUMNS viene utilizzato per visualizzare tutte le colonne di una tabella e tutti i loro dettagli. I dettagli che possiamo esaminare sono Field, Type, Null, Key, Default, Extra
Con questa Query viene mostrato un elenco di tutte le colonne (campi) della tabella sql_rubrica, insieme a tutte le altre informazioni.
1
|
<?php
|
Questo è lo script usato per esporre le tabelle e le informazioni che la riguardano.
1
|
<?php
|
I risultati che ci mostra lo script.
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int | NO | PRI | auto_increment | |
codice | varchar(50) | NO | |||
cognome | varchar(250) | NO | |||
nome | varchar(250) | NO | |||
indirizzo | varchar(250) | NO | |||
cap | varchar(250) | NO | |||
citta | varchar(250) | NO | |||
prov | varchar(10) | NO | |||
data_nascita | date | NO | |||
telefono | varchar(250) | NO |
id, codice, cognome, nome, indirizzo, cap, citta, prov, data_nascita, telefono
Struttura tabella con mysql_fetch_field
La funzione mysql_fetch_field() può essere usata per ottenere informazioni circa i campi restituiti in un resultset dall'esecuzione di una Query.
Questa funzione restituisce un oggetto contenente le informazioni sui campi del resultset. Il mysql_fetch_field () la funzione ottiene i dati dalla funzione mysql_query () e restituisce un oggetto di successo, FALSE in caso di fallimento.
Questo mysql_fetch_field () la funzione riceve informazioni sulla colonna da un risultato della query e restituisce come oggetto.
Restituisce un oggetto, usando che possiamo ottenere le informazioni necessarie sul campo.
Lo script si basa su questa Query:
1
|
<?php
|
Questo script ha una struttura che si scosta leggermente da quelli generalmente usati.
In questo script ho voluto mostrare due differenti ma equivalenti cicli while per iterare sulle varie righe del resultset, ma uno solo può essere utilizzato. In questo script ho optato per il primo
Nel primo ciclo while, che restituisce un record per ogni iterazione sul resultset, estraggo i vari valori basandomi sui nomi dei campi ($fields)
Per visualizzare i singoli valori viene usato il ciclo FOR sull'Array $fields per poter usare il costrutto $row->$fields[$i] anzichè $row[$fields[$i]] perchè non si può utilizzare un oggetto di tipo stdClass come matrice, come reciterebbe il messaggio di errore che questa ultima sintassi causerebbe:
"Fatal error: Cannot use object of type stdClass as array in percorso\nome_file.php on line xx".
Nel secondo
ciclo while faccio uso del ciclo foreach per iterare sull'array associativo con le proprietà dell'oggetto usando la funzione get_object_vars. La funzione get_object_vars restituisce un array associativo con le proprietà dell'oggetto contenuto nella variabile $row.
1
|
<?php
|
Queste che seguono sono le informazioni che otteniamo sulla tabella ;
name | table | def | max_length | not_null | primary_key | multiple_key | unique_key | numeric | blob | type | unsigned | zerofill |
---|---|---|---|---|---|---|---|---|---|---|---|---|
id | sql_citta | 3 | 1 | 1 | 0 | 0 | 1 | 0 | int | 0 | 0 | |
cap | sql_citta | 5 | 0 | 0 | 0 | 0 | 0 | 0 | string | 0 | 0 | |
citta | sql_citta | 22 | 0 | 0 | 0 | 0 | 0 | 0 | string | 0 | 0 | |
prov | sql_citta | 2 | 0 | 0 | 0 | 0 | 0 | 0 | string | 0 | 0 |
Informazioni su Query con EXPLAIN
L'istruzione EXPLAIN può restituire anche informazioni per ogni tabella coinvolta in una Query ed è quindi utile per ottimizzare le Query usate.
L'istruzione EXPLAIN può aiutare a riscrivere meglio le query o modificare le tabelle in modo tale che il server risolva il join nel modo meno oneroso possibile, riducendo il numero di combinazioni da esaminare. Certo le Query presentate in questo esempio sono semplici, quindi in questo caso si evidenzia poco la sua utilità.
1
|
<?php
|
Questo è il solito script per eseguire le Query
1
|
<?php
|
Con la prima Query si ottiene:
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | sql_citta | ALL | 38 | 100.00 |
Con la seconda Query si ottiene:
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | sql_citta | ALL | 38 | 10.00 | Using where |
Con la terza Query si ottiene:
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | sql_libri | ALL | 22 | 33.33 | Using where |
Con la quarta Query si ottiene:
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | PRIMARY | sql_rubrica | ALL | 101 | 100.00 | ||||||
2 | UNION | sql_agenda | ALL | 103 | 100.00 |