Introduzione a PHP e MySQL
PHP e MySQL sono due delle tecnologie più usate per il web. Scopri come connetterle, creare tabelle, inserire e leggere dati in modo sicuro.
PHP e MySQL sono due delle tecnologie più popolari per lo sviluppo web e sono progettate per lavorare insieme. PHP viene eseguito sul server e genera l'HTML che i visitatori vedono; MySQL memorizza i dati di cui quelle pagine hanno bisogno — utenti, post, ordini, commenti. Quasi ogni sito dinamico che utilizzi (un blog, un forum, un negozio online) è costruito su questa coppia o su qualcosa di molto simile.
Questa pagina spiega cosa fa ciascuna tecnologia, i due modi in cui PHP comunica con MySQL e un flusso di lavoro completo ed eseguibile: connettersi, creare una tabella, inserire dati e leggerli di nuovo. Alla fine saprai quali strumenti usare e dove andare per approfondire ogni operazione.
Cos'è PHP?
PHP sta per PHP: Hypertext Preprocessor ed è un linguaggio di scripting lato server. "Lato server" significa che il codice viene eseguito sul server web prima che qualsiasi cosa venga inviata al browser — il visitatore non vede mai il PHP, solo l'HTML che produce. Poiché PHP può leggere l'input dell'utente, comunicare con un database e costruire una pagina diversa per ogni richiesta, viene utilizzato per siti di e-commerce, forum, blog e qualsiasi applicazione che cambia in base ai dati.
Cos'è MySQL?
MySQL è un sistema di gestione di database relazionali (RDBMS). "Relazionale" significa che i dati vivono in tabelle composte da righe e colonne — una tabella users, una tabella products — e le tabelle possono fare riferimento l'una all'altra. PHP invia comandi a MySQL usando SQL (Structured Query Language), il linguaggio standard per chiedere a un database di archiviare o restituire dati. MySQL mantiene i dati al sicuro sul disco tra una richiesta e l'altra, in modo che le informazioni inserite oggi siano ancora disponibili la settimana prossima.
Perché usare PHP e MySQL insieme?
- Gratuiti e open-source. Entrambi sono liberi da usare e distribuire, quindi puoi costruire e ospitare un'applicazione completa senza costi di licenza.
- Scalabili. Lo stesso stack può gestire un blog personale o un sito ad alto traffico — aggiungi risorse man mano che dati e traffico crescono.
- Facili da imparare e ben documentati. PHP ha una curva di apprendimento graduale, MySQL è ovunque e la grande comunità significa che la maggior parte dei problemi che incontri è già risolta online.
- Ampiamente supportati. Quasi ogni provider di hosting offre PHP e MySQL pronte all'uso, e grandi aziende si affidano a questa combinazione in produzione.
Due modi per connettersi: MySQLi vs. PDO
PHP include due moderne estensioni per il database. Dovresti sceglierne una e usarla in modo coerente per un progetto:
| MySQLi | PDO | |
|---|---|---|
| Funziona con | Solo MySQL | 12+ database (MySQL, PostgreSQL, SQLite…) |
| Stili API | Procedurale e orientato agli oggetti | Solo orientato agli oggetti |
| Prepared statements | Sì | Sì |
| Ideale quando | Sei sicuro di usare solo MySQL | Potresti cambiare database in futuro |
Evita le vecchie funzioni
mysql_*che puoi trovare in vecchi tutorial. Sono state rimosse in PHP 7 e sono insicure. Usa MySQLi o PDO.
Entrambe le estensioni supportano i prepared statements, che è la singola funzionalità di sicurezza più importante qui — impediscono gli attacchi di SQL injection. Vedi MySQL Prepared Statements per la spiegazione completa.
Connettersi a un database MySQL
Una connessione richiede quattro elementi: l'host, un nome utente, una password e il nome del database. L'esempio seguente usa lo stile procedurale di MySQLi e controlla gli errori prima di continuare.
<?php
$host = 'localhost';
$user = 'username';
$password = 'password';
$dbname = 'database_name';
// Create connection
$conn = mysqli_connect($host, $user, $password, $dbname);
// Always check the connection before doing anything else
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>Per lo stile orientato agli oggetti di MySQLi, un esempio PDO completo e la risoluzione dei problemi di connessione, vedi Connecting PHP to MySQL e PHP MySQLi.
Il flusso di lavoro tipico
Una volta connesso, quasi tutto ciò che fai con un database è una delle quattro operazioni, spesso chiamate CRUD — Create, Read, Update, Delete. Ognuna corrisponde a un'istruzione SQL e ha il proprio capitolo:
- Crea una tabella per definire dove vivono i dati — vedi Create a MySQL Table.
- Inserisci righe di dati — vedi Insert Data into MySQL.
- Leggi (seleziona) i dati — vedi Select Data from MySQL.
- Aggiorna righe esistenti — vedi Update Data in MySQL.
- Elimina le righe di cui non hai più bisogno — vedi Delete Data in MySQL.
Di solito si filtrano i risultati con una clausola WHERE e li si ordina con ORDER BY.
Un esempio mini completo
Questo script si connette, crea una tabella users se non esiste, inserisce una riga e poi legge tutto indietro. Usa un prepared statement per l'inserimento in modo che i valori forniti dall'utente non possano compromettere la query.
<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'database_name');
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// 1. Create a table
mysqli_query($conn, "
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
)
");
// 2. Insert a row safely with a prepared statement
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);
$name = "Ada Lovelace";
$email = "[email protected]";
mysqli_stmt_execute($stmt);
// 3. Read the data back
$result = mysqli_query($conn, "SELECT id, name, email FROM users");
while ($row = mysqli_fetch_assoc($result)) {
echo $row['id'] . ": " . $row['name'] . " (" . $row['email'] . ")\n";
}
mysqli_close($conn);
?>L'argomento "ss" indica a MySQL che entrambi i valori associati sono stringhe. Poiché i valori vengono associati separatamente dal testo SQL, un attaccante non può iniettare SQL malevolo attraverso il campo name o email.
Errori comuni
- Dimenticare di controllare la connessione. Se le credenziali o l'host sono errati, ogni chiamata successiva fallisce silenziosamente. Usa sempre
die()o gestisci l'errore subito dopo la connessione. - Costruire query con concatenazione di stringhe. Inserire l'input dell'utente direttamente in una stringa SQL apre la porta alla SQL injection. Usa invece i prepared statements.
- Lasciare gli errori del database visibili agli utenti. In produzione, registra gli errori invece di stampare
mysqli_connect_error()sulla pagina — potrebbe rivelare dettagli del server.
Conclusione
PHP e MySQL ti permettono di costruire siti web dinamici e basati sui dati con strumenti gratuiti e ben supportati. Connettiti con MySQLi o PDO, usa sempre i prepared statements per l'input dell'utente e ricorda che quasi ogni attività sul database è semplicemente una delle quattro operazioni CRUD. Da qui, segui i link del flusso di lavoro qui sopra per imparare ogni operazione in profondità.