Creare una tabella MySQL con PHP
Scopri come creare una tabella MySQL con PHP usando mysqli e PDO. Tratta la sintassi CREATE TABLE, tipi di dati, chiavi primarie ed errori comuni.
Una tabella è il luogo in cui MySQL archivia effettivamente le righe di dati. Prima di poter inserire utenti, prodotti o post, la tabella che li conterrà deve esistere, con un insieme definito di colonne e il tipo di dati di ciascuna colonna. Questa pagina mostra come creare una tabella MySQL da PHP usando entrambe le estensioni mysqli e PDO, spiega la sintassi di CREATE TABLE pezzo per pezzo e tratta gli errori che è più probabile incontrare.
Se non hai ancora creato il database in cui si troverà la tabella, fallo prima — vedi Creare un database MySQL. Per un approfondimento sulla connessione stessa, vedi Connettersi a MySQL con PHP.
Come funziona la creazione di una tabella
Da PHP, creare una tabella richiede sempre tre passaggi:
- Connetti al server MySQL e seleziona un database. Una tabella deve appartenere a un database, quindi la connessione deve sapere quale utilizzare.
- Costruisci l'istruzione SQL
CREATE TABLEcome stringa. Si tratta di SQL puro — PHP si limita a consegnarla al server. - Esegui l'istruzione con
mysqli_query()(mysqli) o$pdo->exec()(PDO) e verifica se è riuscita.
L'errore più comune per i principianti è connettersi senza specificare un database. CREATE TABLE fallisce quindi con "No database selected" perché il server non sa dove mettere la tabella. Gli esempi seguenti passano sempre il nome del database per evitare questo problema.
Connessione e selezione di un database
mysqli_connect() accetta il nome del server, il nome utente e la password — e, in modo importante, un quarto argomento opzionale: il nome del database. Passalo affinché la nuova tabella abbia un posto dove stare.
<?php
$server = "localhost";
$username = "username";
$password = "password";
$database = "my_app"; // the database the table will be created in
$conn = mysqli_connect($server, $username, $password, $database);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>Se crei il database nello stesso script, chiama mysqli_select_db($conn, "my_app") dopo averlo creato, oppure riconnettiti con il nome del database come quarto argomento prima di eseguire CREATE TABLE.
Creare una tabella con mysqli
Una volta che la connessione ha un database selezionato, esegui l'istruzione CREATE TABLE con mysqli_query(). Restituisce true in caso di successo e false in caso di errore, quindi controlla sempre il risultato e stampa mysqli_error() quando fallisce — quel messaggio ti dice esattamente cosa è andato storto.
Il seguente esempio crea una tabella users con tre colonne: id, name e email.
<?php
$sql = "CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
if (mysqli_query($conn, $sql)) {
echo "Table created successfully";
} else {
echo "Error creating table: " . mysqli_error($conn);
}
?>Cosa significa ogni parte dell'istruzione
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY— un intero che non può mai essere negativo (UNSIGNED), che aumenta automaticamente di uno per ogni nuova riga (AUTO_INCREMENT) e identifica univocamente ogni riga (PRIMARY KEY). Quasi ogni tabella ha una colonna come questa.name VARCHAR(30) NOT NULL— una stringa a lunghezza variabile fino a 30 caratteri.NOT NULLsignifica che il valore è obbligatorio; un inserimento senza nome verrà rifiutato.email VARCHAR(50) NOT NULL UNIQUE— una stringa obbligatoria con un vincoloUNIQUE, quindi MySQL si rifiuta di memorizzare due righe con la stessa email.
Tipi di dati comuni per le colonne
| Tipo | Usalo per | Esempio |
|---|---|---|
INT | Numeri interi, ID, contatori | views INT |
VARCHAR(n) | Testo breve fino a n caratteri | name VARCHAR(50) |
TEXT | Testo lungo (articoli, commenti) | body TEXT |
DECIMAL(p,s) | Decimali esatti come i prezzi | price DECIMAL(8,2) |
DATE / DATETIME | Date e timestamp | created_at DATETIME |
BOOLEAN | Flag vero/falso | active BOOLEAN |
Creare una tabella con PDO
PDO è l'API più moderna e portabile ed è preferita per i nuovi progetti. L'SQL è identico — cambia solo il wrapper PHP. Con PDO in modalità eccezione, si racchiude la chiamata in un try/catch invece di controllare un valore restituito.
<?php
$dsn = "mysql:host=localhost;dbname=my_app";
try {
$pdo = new PDO($dsn, "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
$pdo->exec($sql);
echo "Table created successfully";
} catch (PDOException $e) {
echo "Error creating table: " . $e->getMessage();
}
?>Evitare l'errore "table already exists"
Se esegui un'istruzione CREATE TABLE due volte, la seconda esecuzione fallisce con "Table 'users' already exists". Aggiungi IF NOT EXISTS per rendere l'istruzione sicura da rieseguire — MySQL semplicemente salta la creazione quando la tabella è già presente.
<?php
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
mysqli_query($conn, $sql);
?>Errori comuni e soluzioni
- "No database selected" — ti sei connesso senza un database. Passalo come quarto argomento a
mysqli_connect()oppure usamysqli_select_db(). - "Table 'users' already exists" — usa
CREATE TABLE IF NOT EXISTS, oppure elimina prima la vecchia tabella. - "You have an error in your SQL syntax" — di solito è una virgola spuria dopo l'ultima colonna, oppure una parola riservata come
orderusata come nome di colonna senza backtick. Racchiudi tali nomi in backtick:`order`. - "Access denied for user" — l'account MySQL non ha i privilegi
CREATEsu quel database.
Passi successivi
Ora che la tabella esiste, puoi iniziare a lavorare con i dati al suo interno:
- Inserire dati in una tabella MySQL
- Selezionare dati da una tabella MySQL
- Usare le prepared statement per inserire input degli utenti in modo sicuro
- Panoramica dell'estensione mysqli
Riepilogo
Creare una tabella da PHP si riduce a connettersi con un database selezionato, scrivere un'istruzione CREATE TABLE che definisce ogni colonna e il suo tipo, ed eseguirla con mysqli_query() o PDO::exec(). Controlla sempre gli errori, aggiungi IF NOT EXISTS per gli script che potresti rieseguire e scegli un tipo di dati sensato per ogni colonna affinché MySQL archivi i tuoi dati in modo efficiente e sicuro.