Il logo del sito

Appunti sull'interfaccia di PHP con MySQL

Traduzione da MySQL Create Table

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

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;
      }      
?>           
<p class=phpoutput> Connessione pdo riuscita </p><p class=phpoutput >CREATE TABLE VisitatoriRegistrati( 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 )</p><p class=phpoutput >SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'VisitatoriRegistrati' already exists</p>

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: