Creazione di una tabella

Gli argomenti di questa pagina

  • Prima di iniziare
  • Creazione della tabella
  • Creare una tabella usando una Query: CREATE TABLE
  • Creare una tabella usando un file .sql
  • Uso del file .sql da pannello di controllo di phpmyadmin.
  • Uso del file .sql tramite script.

Prima di iniziare

Prima di iniziare a lavorare con MYSQL occorre che abbiamo una tabella dove poter memorizzare, modificare, eliminare, leggere i record.

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);
?> 

Negli esempi di questa pagina, per connesstrsi al DB, viene usata questa semplice funzione che viene richiamata con: $Link = db_connect()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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;
}
?>

Creazione della tabella

Per creare una tabella si possono seguire diverse strade.

  • Creare manualmente la tabella da pannello di controllo del phpmyadmin
    • scegliendo il DB si apre nel frame centrale la finestra di lavoro ed a fondo pagina avremo un riquadro "Crea una nuova tabella nel database..........."
      • nella finestra successiva è necessario aggiungere i campi assegnando loro le giuste proprietà come indicato in questa immagine
    • Se siamo in possesso di un file con estensione .sql possiamo caricarlo sul server agendo sulla voce "Importa"
  • Creare la tabella usando una Query (la procedura verrà mostrata qui di seguito
  • Creare la tabella usando un file con estensione .sql ed uno script PHP mostrato ancora più in basso

Creare una tabella usando una Query: CREATE TABLE

La procedura è semplice. Molto delicata è invece la creazione della Query da usare.

In questa Query, oltre alla riga dedicata alla creazione della tabella, ci sono le indicazioni per la creazione di ogni singolo campo indicandone il nome ed il tipo di dato da attribuirgli.
Una nota particolare merita il campo ID che deve essere necessariamente essere "NOT NULL" ed "auto_increment". Alla fine dell'elenco dei campi viene ribadito che il campo ID assume la proprietà di "PRIMARY KEY".
Finito l'elenco dei campi racchiuso tra le parentesi tonde, viene definito il tipo di tabella che è "MyISAM", la codifica dei caratteri da usare che viene impostato a "utf8", quindi viene definito da quale valore iniziare l'"AUTO_INCREMENT".

Il codice che segue è quello normale per la esecuzione di una qualsiasi Query:

  • viene incluso il file db_login.php
  • viene tentata l'apertura del canale di connessione al server
  • viene tentata la selezione la connessione al DB
  • viene controllata l'esistenza della tabella con l'istruzione mysql_num_rows( mysql_query("SHOW TABLES LIKE '".$table."'"))
  • se la tabella non viene trovata, viene eseguita la Query per la creazione della tabella
  • Chiusura della connessione

I possibili messaggi che possiamo ottenere sono:

  • se la tabella non viene trovata:
    La tabella sql_agenda non esiste...creazione della tabella in atto!
    Tabella sql_agenda creata
  • se la tabella viene trovata:
    La tabella sql_agenda esiste
Creazione della tabella con Query
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
<?php
include ('res/db_login.php');
$table "sql_miky";
$Query "CREATE TABLE IF NOT EXISTS " $table " (
  id int(10) NOT NULL auto_increment,
  cognome varchar(250) NOT NULL,
  nome varchar(250) NOT NULL,
  indirizzo varchar(250) NOT NULL,
  id_citta int(10) NOT NULL,
  data_nascita date NOT NULL,
  telefono varchar(250) NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;"
;
//    ==========================================================
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( 
mysql_num_rowsmysql_query("SHOW TABLES LIKE '".$table."'"))){
             echo 
"La tabella " $table " esiste<br />\n";
         } else {
             echo 
"La tabella " $table " non esiste...creazione della tabella in atto!<br />\n";
             if (@
mysql_query($Query)) {
                 echo 
"Tabella " $table " creata<br />\n";
             } else {
                 echo 
"Errore: " mysql_error();
             }
         }
        
$result mysql_query($Query);
        
    }
}
@
mysql_close ($Link);
?> 

Creare una tabella usando un file .sql

Il modo più semplice per ottenere un file .sql é quello di esportarlo dal pannello di controllo del phpmyadmin o, come vedremo in altro momento, usando uno script che esegue la stessa operazione.
L'aspetto del file .sql è simile a quello mostrato qui sotto.

Il file .sql
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
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generato il: 07 Nov, 2013 at 11:21 PM
-- Versione MySQL: 5.0.51
-- Versione PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Database: `MY_DB`
-- 

-- --------------------------------------------------------

-- 
-- Struttura della tabella `sql_agenda`
-- 

DROP TABLE IF EXISTS `sql_agenda`;
CREATE TABLE IF NOT EXISTS `sql_agenda` (
  `id` int(10) NOT NULL auto_increment,
  `cognome` varchar(250) NOT NULL,
  `nome` varchar(250) NOT NULL,
  `indirizzo` varchar(250) NOT NULL,
  `id_citta` int(10) NOT NULL,
  `data_nascita` date NOT NULL,
  `telefono` varchar(250) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Uso del file .sql da pannello di controllo di phpmyadmin.

E' questa la strada più semplice e non c'è alcun bisogno di programmazione.
Basta recarsi al pannello di controllo di phpmyadmin ed importare il file come indicato in figura agendo sulla voce "Importa".

Uso del file .sql tramite script.

Come vedremo più avanti in questo paragrafo, usando questo file da script, occorre prestare attenzione a scartare le righe che contengono commenti e a concatenare invece le righe da includere nella o nelle query che si verranno a creare.

  • vengono inclusi i files db_login.php e res.php
  • vengono definiti il nome della tabella e quello del file .sql (per convenzione al file viene dato il nome della tabella con l'aggiunta della estensione .sql)
  • prima di iniziare l'esecuzione della procedura per la creazione della tabella viene controllato se il file richiesto esiste
  • viene creato il collegamento al DB usando la funzione personale db_connect()
  • viene controllata l'esistenza della tabella con l'istruzione mysql_num_rows( mysql_query("SHOW TABLES LIKE '".$table."'"))
  • se la tabella non viene trovata, si continua col codice che si trova nella ELSE
  • con la funzione PHP file() viene letto il contenuto del file .sql e memorizzato nella matrice $file_content
  • col ciclo FOREACH viene letta la matrice una riga alla volta
  • se la riga letta è valida viene aggiunta alla variabile $query
  • viene controllato se l'ultimo carattere della stringa memorizzata in $query è un punto e virgola ( ; ), viene eseguita la Query
  • dopo l'esecuzione della Query la variabile $query viene azzerata per continuare con le altre righe della matrice
  • alla fine la connessione viene chiusa

Questo che segue è il codice usato per questo procedimento.

Creazione della tabella con file .sql
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
<?php
include ('res/db_login.php');
include (
'res/res.php');
$table "sql_agenda";
$sqlfile "sql_files/" $table ".sql";

if (
file_exists($sqlfile)) {
    if (@
$Link db_connect()) {
        if( 
mysql_num_rowsmysql_query("SHOW TABLES LIKE '".$table."'"))){
            echo 
"La tabella " $table " esiste nel DB<br />\n";
        } else {
            
$file_content file($sqlfile);
            
$query "";
            
$rec_count 0
            foreach(
$file_content as $sql_line){
                if(
trim($sql_line) != "" && strpos($sql_line"--") === false){
                    
$query .= $sql_line;
                    if (
substr(rtrim($query), -1) == ';'){
                        
$rec_count ++;
                        @
$result mysql_query($query);
                        if (!
$result) {
                            echo 
mysql_error() . "<br />\n";
                        } else {
                            echo 
"Query " $rec_count " eseguita correttamente<br />\n";
                        }
                        
$query "";
                    }
                }
            }
            echo 
"Tabella " $table " creata correttamente<br />\n";
        }
    } else {
        echo 
"Si sono verificati problemi col DB<br />\n";
    }
} else {
    echo 
"file sql non trovato<br />\n";
}
@
mysql_close ($Link);
?> 

 

 



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