PHP MySQL Database
$ 4. MySQL Create Table
Un tabella ha un nome unico all'interno del database e consiste di righe e colonne
Creeremo una tabella, "MyGuess", con cinque colonne: "id", "firstname", "lastname", "email" and "reg_date":
CREATE TABLE MyGuess(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)
Note per la tabella MyGuess
Il data type, INT, VARCHAR, TIMESTAMP, specifica quello che può essere contenuto nel campo. Per la lista completa di tutti i data type disponibili si veda Data Types reference.
In aggiunta al data type, per ogni colonna, si possono specificare altri attributi opzionali
- NOT NULL - la colonna non può essere nulla;
- DEFAULT value - imposta un valore di default per il campo;
- UNSIGNED - Usato per i data type numerici, limita il campo di variabilità ai numeri positivi;
- AUTO INCREMENT - MySQL incrementa automaticamente il valore del campo di 1 ogni volta che viene inserito un record;
- PRIMARY KEY - Indentificatore unico della riga della tabella. La colonna settata come PRIMARY KEY è spesso configurata come un identificatore numerico con AUTO_INCREMENT.
Ogni tabella dovrebbe avere un chiave primaria. Nel caso dell'esempio è la colonna "id". Il suo valore deve essere unico per ogni record della tabella.
§ 4.1 Creare una tabella MySQL usando MySQLi e PDO
Gli esempi che seguono mostrano come creare la tabella MyGuest secondo le tre modalità MySQLi object-oriented, MySQLi procedural e PDO.
§ 4.1.1 CREATE TABLE MyGuest_1 con MySQLi object-oriented
<?php
include 'infoConnessione.php';
// SQL per CREATE TABLE
$sql = "CREATE TABLE MyGuest_1(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn-> connect_error){
die("Connection failed: " . $conn-> connect_error);
}
echo "<p class=phpoutput> Connessione mysqli object-oriented riuscita. </p>;
// Create table
if ($conn->query($sql)==TRUE){
echo "<p class=phpoutput > Tabella MyGuess creata con successo</p>";
} else {
echo "<p class=phpoutput >
Errore nella creazione della tabella MyGuess_1: "
. $conn->error . "</p>";
}
// Close connection
$conn->close();
?>
Connessione mysqli object-oriented riuscita.
Errore nella creazione della tabella MyGuest_1: Table 'MyGuest_1' already exists
La tabella MyGuest_1 l'ho inserita nel mio unico database disponile. Naturalmente nel codice php che è stato eseguito ho sostituito "mioUserName", "miaPassword", e "myDB" con i valori propri del mio database.
§ 4.1.2 CREATE TABLE MyGuest_2 con MySQLi procedural
<?php
include 'infoConnessione.php';
// SQL per CREATE TABLE
$sql = "CREATE TABLE MyGuest_2(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if (!$conn){
die("Connection failed: " . mysqli_connect_error);
}
echo "<p class=phpoutput> Connessione mysqli procedural riuscita. </p>;
// Create table
if (mysqli_query($conn, $sql)) {
echo "<p class=phpoutput > tabella MyGuest_2 creata con successo</p>";
} else {
echo "<p class=phpoutput >
Errore nella creazione della tabella MyGuest_2: "
. mysqli_error($conn) . "</p>";
}
// Close connection
mysqli_close($conn);
?>
Connessione mysqli procedural riuscita
Errore nella creazione della tabella MyGuest_2: Table 'MyGuest_2' already exists
La tabella MyGuest_2 l'ho inserita nel mio unico database disponile. Naturalmente nel codice php che è stato eseguito ho sostituito "mioUserName", "miaPassword", e "myDB" con i valori propri del mio database.
§ 4.1.3 CREATE TABLE MyGuest_3 con PDO
<?php
include 'infoConnessione.php';
$conn = null;
// SQL per CREATE TABLE
$sql = "CREATE TABLE MyGuest_3(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
try{
// Create connection
$conn = new PDO("mysql:host=$servername; dbname=$dbname",
$username, $password);
// Set Attribute
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "<p class=phpoutput> Connessione pdo riuscita. </p>";
// Create table
// use exec() because no results are returned
$conn->exec($sql);
echo "<p class=phpoutput > Tabella myGuest_3 creata con successo</p>";
}
catch(PDOException $e){
echo "<p class=phpoutput >". $sql. "</p>";
echo "<p class=phpoutput >". $e->getMessage(). "</p>";
}
// Close connection
if ($conn != null){
$conn = null;
}
?>
Connessione pdo riuscita
CREATE TABLE MyGuest_3( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP )
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'MyGuest_3' already exists
La tabella MyGuest_3 l'ho inserita nel mio unico database disponile. Naturalmente nel codice php che è stato eseguito ho sostituito "mioUserName", "miaPassword", e "myDB" con i valori propri del mio database.
§ 4.2 CREATE TABLE VisitatoriRegistrati con PDO
Ecco un altro esempio di creazione di tabella in cui nello statement SQL compaiono altri tipi di dati e constraints
<?php
include 'infoConnessione.php';
$tablename = "VisitatoriRegistrati";
$sql = "CREATE TABLE $tablename(
userID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
userName VARCHAR(50) NOT NULL,
password VARCHAR(8) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE,
qsa BOOLEAN DEFAULT TRUE,
qsaTools BOOLEAN DEFAULT FALSE,
webTools BOOLEAN DEFAULT FALSE,
reg_date TIMESTAMP,
currentLogged BOOLEAN DEFAULT FALSE,
lastVisit DATETIME
)";
try{
// Create connection
$conn = new PDO("mysql:host=$servername; dbname=$dbname", $username, $password);
// Set attribute
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "<p class=phpoutput> Connessione pdo riuscita </p>";
// Create table
// use exec() because no results are returned
$conn->exec($sql);
echo "<p class=phpoutput > Table $tablename creata con successo</p>";
}
catch(PDOException $e){
echo "<p class=phpoutput >". $sql. "</p>";
echo "<p class=phpoutput >". $e->getMessage(). "</p>";
}
// Close connection
if ($conn != null){
$conn = null;
}
?>
Qui, nello statement CREATE TABLE compaiono i tipi di dato BOOLEAN e DATETIME inoltre compaiono i constraints DEFAULT e UNIQUE
I constraints sono regole che devono essere rispettate dai dati inseriti in una tabella. Possono essere specificati al momento della creazione della tabella con lo statement CREATE TABLE, o in seguito, con lo statement ALTER TABLE
Constraints comunemente usati sono:
- NOT NULL
- UNIQUE - assicura l'unicità dei valori in una colonna.
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
- INDEX