Creare una connessione PHP e MySQL
Stabilire una connessione tra PHP e MySQL è fondamentale per le applicazioni web dinamiche. Scopri come connetterti, eseguire query e gestire la sicurezza.
Stabilire una connessione tra PHP e MySQL è essenziale per costruire applicazioni web dinamiche. Con questa connessione puoi accedere e manipolare i dati archiviati in un database MySQL tramite script PHP. Questo articolo ti guida attraverso tutti i metodi di connessione, quando usarne uno rispetto agli altri, e le pratiche di sicurezza per mantenere la tua applicazione al sicuro.
Questa pagina tratta:
- Le tre API di connessione offerte da PHP e quale scegliere
- La connessione con lo stile procedurale di
mysqlie la verifica degli errori - Lo stile orientato agli oggetti di
mysqlie lo stile moderno con PDO - La selezione di un database, l'esecuzione di una prima query e la chiusura della connessione
- Problemi comuni: set di caratteri, segnalazione degli errori e gestione delle credenziali
Prerequisiti
Prima di procedere con la creazione della connessione, è importante assicurarsi di avere i seguenti prerequisiti:
- Un server web con PHP installato (come Apache o Nginx)
- Un database MySQL
- L'estensione PHP MySQL (inclusa nella maggior parte delle installazioni PHP)
Capire la connessione tra PHP e MySQL
Una connessione PHP e MySQL coinvolge due componenti principali: PHP e un database MySQL. PHP è un linguaggio di scripting lato server usato per creare pagine web dinamiche, mentre un database MySQL è usato per archiviare e recuperare dati.
PHP offre tre modi per comunicare con MySQL. Conoscere la differenza fin dall'inizio evita di riscrivere il codice in seguito:
| API | Stile | Istruzioni preparate | Funziona con altri database |
|---|---|---|---|
mysqli (procedurale) | Chiamate di funzione come mysqli_connect() | Sì | Solo MySQL/MariaDB |
mysqli (orientato agli oggetti) | Metodi su un oggetto mysqli | Sì | Solo MySQL/MariaDB |
| PDO | Metodi su un oggetto PDO | Sì | Molti database (un'unica API) |
Le vecchie funzioni mysql_* (senza la i) sono state rimosse in PHP 7 — non usarle mai. Per i nuovi progetti, preferisci PDO o mysqli orientato agli oggetti perché supportano le istruzioni preparate in modo pulito, che sono la tua principale difesa contro l'SQL injection. Questa pagina mostra tutti e tre i metodi così da poter leggere e mantenere qualsiasi codebase. Per un approfondimento sull'estensione mysqli, consulta PHP MySQLi.
Stabilire una connessione
Per stabilire una connessione tra PHP e MySQL, dovrai usare la funzione mysqli_connect(). Questa funzione accetta diversi parametri, tra cui il nome del server, il nome utente e la password.
Ecco un esempio di come usare la funzione mysqli_connect():
Esempio PHP di come usare la funzione mysqli_connect
<?php
$server = "localhost";
$username = "your_username";
$password = "your_password";
// Establish connection
$conn = mysqli_connect($server, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>Nell'esempio sopra, $server è impostato su localhost, che è la posizione predefinita del server MySQL. $username e $password devono essere impostati sul nome utente e sulla password usati per accedere al database.
Dopo aver stabilito la connessione, usiamo la funzione mysqli_connect_error() per verificare se la connessione è avvenuta con successo. Se la connessione fallisce, lo script mostra un messaggio di errore e termina la connessione. Se la connessione ha successo, lo script mostra "Connected successfully".
Suggerimento: Puoi anche passare il nome del database come quarto parametro a
mysqli_connect()per semplificare la logica di connessione e saltare un passaggio separato di selezione del database:$conn = mysqli_connect($server, $username, $password, "your_database");
mysqli orientato agli oggetti
La stessa connessione nello stile orientato agli oggetti crea un oggetto mysqli con new. Molti sviluppatori la trovano più pulita perché la connessione e i suoi metodi risiedono su un unico oggetto:
<?php
$conn = new mysqli("localhost", "your_username", "your_password", "your_database");
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>Connessione con PDO
PDO (PHP Data Objects) offre un'unica API coerente per molti database. I dettagli della connessione vanno in una stringa DSN (Data Source Name):
<?php
$dsn = "mysql:host=localhost;dbname=your_database;charset=utf8mb4";
try {
$pdo = new PDO($dsn, "your_username", "your_password");
// Make PDO throw exceptions on error instead of failing silently
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>Imposta il set di caratteri. Specifica sempre
charset=utf8mb4(PDO) oppure chiama$conn->set_charset("utf8mb4")(mysqli). Senza di esso, i caratteri multi-byte e le emoji possono essere archiviati o restituiti in modo errato.
Selezionare un database
Una volta stabilita una connessione al server MySQL, dovrai selezionare un database con cui lavorare. Puoi farlo usando la funzione mysqli_select_db().
Ecco un esempio di come usare la funzione mysqli_select_db():
Esempio PHP di come usare la funzione mysqli_select_db
<?php
$server = "localhost";
$username = "your_username";
$password = "your_password";
$db = "your_database";
// Establish connection
$conn = mysqli_connect($server, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Select database
$select_db = mysqli_select_db($conn, $db);
// Check database selection
if (!$select_db) {
die("Error selecting database: " . mysqli_error($conn));
}
echo "Database selected successfully";
?>Nell'esempio sopra, $db è impostato sul nome del database che vuoi selezionare. Dopo aver stabilito la connessione, usiamo la funzione mysqli_select_db() per selezionare il database. La funzione accetta due parametri: la connessione e il nome del database.
Usiamo poi la funzione mysqli_error() per verificare se il database è stato selezionato con successo. Se la selezione fallisce, lo script mostra un messaggio di errore e termina la connessione. Se la selezione ha successo, lo script mostra "Database selected successfully".
Eseguire la prima query
Una connessione è utile solo quando si esegue una query. L'esempio seguente seleziona righe da una tabella users e itera sui risultati. Poiché il valore proviene da una variabile, usa un'istruzione preparata così che l'input utente non possa mai essere iniettato nell'SQL:
<?php
$conn = new mysqli("localhost", "your_username", "your_password", "your_database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Prepare a parameterized query
$stmt = $conn->prepare("SELECT id, name FROM users WHERE id > ?");
$stmt->bind_param("i", $minId); // "i" = integer parameter
$minId = 0;
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row["id"] . ": " . $row["name"] . "\n";
}
$stmt->close();
$conn->close();
?>Non costruire mai le query concatenando input utente grezzo nella stringa SQL — questo apre la porta all'SQL injection. Per approfondire il binding dei parametri, consulta MySQL Prepared Statements. Per il set completo di operazioni CRUD, consulta Insert Data e Select Data.
Chiudere la connessione
Quando hai terminato di lavorare con un database MySQL, è importante chiudere la connessione. Questo aiuta a liberare risorse e prevenire potenziali problemi di sicurezza.
Per chiudere la connessione, puoi usare la funzione mysqli_close(). Ecco un esempio di come usare la funzione mysqli_close():
Esempio PHP di come usare la funzione mysqli_close
<?php
$server = "localhost";
$username = "your_username";
$password = "your_password";
$db = "your_database";
// Establish connection
$conn = mysqli_connect($server, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Select database
$select_db = mysqli_select_db($conn, $db);
// Check database selection
if (!$select_db) {
die("Error selecting database: " . mysqli_error($conn));
}
// Close connection
mysqli_close($conn);
echo "Connection closed";
?>Nell'esempio sopra, usiamo la funzione mysqli_close() per chiudere la connessione. La funzione accetta un parametro: la connessione. Lo script mostra poi "Connection closed" per confermare che la connessione è stata chiusa.
Nota sulla sicurezza: Negli ambienti di produzione, evita di inserire le credenziali direttamente nel codice. Usa variabili d'ambiente o file di configurazione per archiviare i dati sensibili.
Conclusione
In questo articolo abbiamo trattato i prerequisiti, le tre API di connessione (mysqli procedurale, mysqli orientato agli oggetti e PDO), la creazione di una connessione, la selezione di un database, l'esecuzione di una query parametrizzata sicura e la chiusura della connessione. Dovresti ora essere in grado di connettere PHP a MySQL e iniziare a eseguire operazioni CRUD.
Per le applicazioni PHP moderne, preferisci PDO o l'interfaccia mysqli orientata agli oggetti con istruzioni preparate: offrono maggiore sicurezza e una gestione degli errori più chiara. Da qui, continua con Create a MySQL Database, Create a Table e la panoramica MySQL Database.