Creare un Database MySQL con PHP
Guida alla creazione di un database MySQL con PHP: connessione al server, istruzione CREATE DATABASE e creazione di una tabella.
Un database è il contenitore con nome che ospita le tue tabelle, e ogni tabella contiene i dati dell'applicazione in righe e colonne. Prima di poter memorizzare utenti, ordini o post di un blog, quel contenitore deve esistere sul server MySQL. Questo capitolo illustra l'intera sequenza in PHP: connettersi al server, eseguire un'istruzione CREATE DATABASE, quindi aggiungere una tabella al suo interno.
Dovresti già avere PHP e un server MySQL (o MariaDB) installato e in esecuzione. Se il passaggio di connessione fallisce, consulta PHP Connect to MySQL e PHP MySQLi per i dettagli di configurazione.
Due modi per comunicare con MySQL
PHP include due estensioni moderne per MySQL: MySQLi e PDO. Entrambe sono sicure e supportate; questo capitolo usa MySQLi perché è specifica per MySQL e risulta semplice da leggere, ma lo stesso SQL CREATE DATABASE funziona anche tramite PDO. Usa PDO quando potresti dover cambiare motore di database in futuro, e preferisci le prepared statement ogni volta che l'input dell'utente è coinvolto in una query.
Le vecchie funzioni mysql_* sono state rimosse in PHP 7 — non usarle.
Passo 1 — Connettersi al server MySQL
Per creare un database ti connetti al server, non a un database specifico (che ancora non esiste). Fornisci host, nome utente e password, ma nessun nome di database:
<?php
$servername = "localhost";
$username = "root";
$password = "";
// Create connection (no database name — we're about to create one)
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>new mysqli(...) restituisce un oggetto di connessione. Se qualcosa va storto, $conn->connect_error contiene il messaggio e die() interrompe lo script con quel messaggio. Il nome utente e la password sopra sono segnaposto — sostituiscili con le tue credenziali.
I tre passi seguenti sono mostrati come frammenti separati per chiarezza. In un progetto reale terresti il codice di connessione in un file separato e lo importeresti con require o include.
Passo 2 — Creare il database
Con una connessione al server aperta, esegui un'istruzione CREATE DATABASE tramite $conn->query(). Per un'istruzione che non restituisce righe (come CREATE, INSERT o UPDATE), query() restituisce TRUE in caso di successo e FALSE in caso di errore:
<?php
// SQL to create a database named myDB
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>Suggerimento: usa CREATE DATABASE IF NOT EXISTS myDB per evitare un errore se il database esiste già — utile negli script di configurazione che possono essere eseguiti più di una volta.
Passo 3 — Creare una tabella nel database
Un database da solo è vuoto. I dati risiedono nelle tabelle, che si definiscono con CREATE TABLE — un nome di tabella seguito dalle colonne e dai loro tipi di dati. Questa volta ti connetti con il nome del database (il quarto argomento) in modo che la nuova tabella venga creata nel posto giusto:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// Connect, this time selecting the myDB database
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL to create a table
$sql = "CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . $conn->error;
}
$conn->close();
?>Il significato delle definizioni delle colonne:
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY— un numero intero univoco generato automaticamente per ogni riga.UNSIGNEDsignifica senza valori negativi;PRIMARY KEYlo rende l'identificatore della riga.VARCHAR(30)— testo a lunghezza variabile fino a 30 caratteri.NOT NULL— la colonna deve avere sempre un valore.reg_date TIMESTAMP— impostato all'ora corrente all'inserimento e aggiornato ad ogni modifica.
Nota: la vecchia sintassi della larghezza di visualizzazione INT(6) è deprecata da MySQL 8.0.17 e non ha mai influenzato lo storage o l'intervallo, quindi si preferisce INT semplice.
Errori comuni e come risolverli
- "Access denied for user" — nome utente o password errati, o l'utente non ha il privilegio
CREATE. Verifica le credenziali e i permessi. - "Can't create database 'myDB'; database exists" — esiste già. Eliminalo prima, oppure usa
CREATE DATABASE IF NOT EXISTS. $conn->errorè vuoto ma la query è fallita — assicurati di aver confrontato con=== TRUE; unCREATEriuscito restituisce il booleantrue, non un result set.
Dove andare dopo
Una volta che il database e le tabelle esistono, i passi successivi sono inserire dati e recuperarli:
- Insert Data into MySQL — aggiungi righe con
INSERT INTO. - Select Data from MySQL — leggi righe con
SELECT. - MySQL Prepared Statements — il modo sicuro per usare l'input dell'utente nelle query.
- Create a MySQL Table — uno sguardo più approfondito a
CREATE TABLE.
Conclusione
Creare un database MySQL in PHP si riduce a tre operazioni: aprire una connessione al server, eseguire CREATE DATABASE, quindi connettersi a quel database ed eseguire CREATE TABLE. Verificare $conn->connect_error e il valore restituito da query() ad ogni passo trasforma i fallimenti silenziosi in messaggi chiari — l'abitudine che rende affidabile il resto del tuo data layer.