PHP: Connessione a MySQL
Scopri come connetterti a MySQL da PHP utilizzando MySQLi e PDO
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione PHP cloud pronta all'uso che fornisce una serie di vantaggi, tra cui:
- Distribuisci la tua applicazione in pochi secondi con un semplice
git push.- Usa il tuo nome di dominio e beneficia della configurazione automatica dei certificati HTTPS per una sicurezza migliorata.
- Goditi la tranquillità con backup automatici, aggiornamenti con un clic, e una tariffazione semplice, trasparente e prevedibile.
- Ottieni prestazioni ottimali e una sicurezza robusta grazie a una VM privata e dedicata.
Risparmia tempo e semplificati la vita: ci vogliono solo 5 minuti per provare la soluzione di PHP cloud hosting di Stackhero!
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.