W3docs

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 mysqli e la verifica degli errori
  • Lo stile orientato agli oggetti di mysqli e 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:

APIStileIstruzioni preparateFunziona con altri database
mysqli (procedurale)Chiamate di funzione come mysqli_connect()Solo MySQL/MariaDB
mysqli (orientato agli oggetti)Metodi su un oggetto mysqliSolo MySQL/MariaDB
PDOMetodi su un oggetto PDOMolti 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.

Esercitazione

Pratica
Cosa è necessario per connettersi a un database MySQL usando PHP?
Cosa è necessario per connettersi a un database MySQL usando PHP?
Was this page helpful?