PHP: Connessione a MySQL
Scopri come connetterti a MySQL da PHP utilizzando MySQLi e PDO
👋 Benvenuto nella documentazione di Stackhero!
Stackhero offre una piattaforma PHP cloud progettata per deployment rapidi e affidabili:
- Distribuisci la tua applicazione PHP in produzione in pochi secondi con un semplice
git push.- Usa il tuo dominio personale, con certificati HTTPS automatici configurati per te. Non sono necessari passaggi manuali.
- Affidati a backup automatici, aggiornamenti con un clic e prezzi chiari e prevedibili. Stackhero si occupa di questi dettagli, così puoi concentrarti sul tuo codice.
- Approfitta di elevate prestazioni e sicurezza su un'infrastruttura privata e dedicata, costruita appositamente per le tue applicazioni.
Rendi il tuo workflow più fluido e risparmia tempo. Iniziare con il PHP cloud hosting di Stackhero richiede solo pochi minuti.
Connessione di PHP a MySQL con MySQLi (stile orientato agli oggetti)
Il seguente esempio dimostra come connettere PHP a MySQL utilizzando MySQLi in uno stile orientato agli oggetti. È buona pratica creare un database e un utente dedicati per la tua applicazione piuttosto che utilizzare l'account 'root'. Questo approccio migliora la sicurezza della tua applicazione.
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // In produzione, crea un database e un utente dedicati in phpMyAdmin
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Errore di connessione: ' . $mysqli->connect_error);
}
echo 'Connessione riuscita... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Connessione di PHP a MySQL con MySQLi (stile procedurale)
Se preferisci un approccio procedurale, l'esempio seguente mostra come stabilire una connessione utilizzando MySQLi in uno stile procedurale. Come sempre, si raccomanda l'uso di un database dedicato e di un utente con restrizioni per una maggiore sicurezza.
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // Per una maggiore sicurezza, crea un database e un utente dedicati in phpMyAdmin
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Errore di connessione: ' . mysqli_connect_error($mysqli));
}
echo 'Successo: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Connessione di PHP a MySQL con PDO
PDO offre un metodo flessibile per connettere PHP a MySQL. L'esempio seguente illustra come utilizzare PDO per stabilire una connessione. Affronta anche i potenziali problemi di certificato SSL che possono sorgere se il tuo sistema non ha accesso ai certificati CA.
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // Per ambienti di produzione, considera di creare un database e un utente dedicati
$dsn = "mysql:host=$hostname;dbname=$database";
$options = array(
// Se incontri un errore come "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1...",
// potrebbe essere dovuto alla mancanza di certificati CA nella directory /etc/ssl/certs/
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
);
$pdo = new PDO($dsn, $user, $password, $options);
$stm = $pdo->query('SELECT VERSION()');
$version = $stm->fetch();
echo 'Sei connesso a un database che esegue la versione ' . $version[0] . "\n";
?>
Gestione dell'errore "SSL operation failed with code 1"
Se vedi un errore come Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed, è probabile che la directory /etc/ssl/certs/ del tuo sistema non contenga i certificati CA necessari.
Se hai accesso al sistema che esegue il tuo codice PHP, puoi installare i certificati come segue:
- Su Ubuntu/Debian, esegui
sudo apt-get install ca-certificates - Su Alpine Linux, esegui
apk add ca-certificates
Se non hai accesso diretto per installare questi certificati sul tuo sistema, puoi installare il certificato manualmente:
- Scarica il certificato sul tuo computer: https://letsencrypt.org/certs/isrgrootx1.pem
- Aggiungi il file
isrgrootx1.pemai tuoi file di progetto PHP. - Commenta la linea
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Decommenta la linea
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Connessione di PHP a MySQL utilizzando credenziali da variabili d'ambiente
Per una maggiore sicurezza e una gestione della configurazione più semplice, si raccomanda di evitare di codificare le credenziali nel codice sorgente. Invece, recupera queste impostazioni dalle variabili d'ambiente come mostrato di seguito:
<?php
$hostname = getenv('STACKHERO_MYSQL_HOST');
$user = getenv('STACKHERO_MYSQL_USER');
$password = getenv('STACKHERO_MYSQL_PASSWORD');
$database = getenv('STACKHERO_MYSQL_USER'); // Per convenzione, il nome del database corrisponde al nome utente
?>
L'uso delle variabili d'ambiente aiuta a mantenere la sicurezza delle tue credenziali e rende la tua configurazione più adattabile a diversi ambienti.