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!

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();

?>

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);

?>

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";

?>

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:

  1. Su Ubuntu/Debian, esegui sudo apt-get install ca-certificates
  2. 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:

  1. Scarica il certificato sul tuo computer: https://letsencrypt.org/certs/isrgrootx1.pem
  2. Aggiungi il file isrgrootx1.pem ai tuoi file di progetto PHP.
  3. Commenta la linea PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/'
  4. Decommenta la linea PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'

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.