PHP: Se connecter à MySQL

Découvrez comment connecter PHP à MySQL avec MySQLi et PDO

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution PHP cloud prête à l'emploi qui offre de nombreux avantages, notamment :

  • Déployez votre application en quelques secondes avec un simple git push.
  • Utilisez votre propre nom de domaine et profitez de la configuration automatique des certificats HTTPS pour une sécurité renforcée.
  • Bénéficiez de la sauvegarde automatique, des mises à jour en un clic, ainsi que d'une tarification simple, transparente et prévisible.
  • Profitez d'une performance optimale et d'une sécurité renforcée grâce à une VM privée et dédiée.

Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution PHP cloud hosting de Stackhero !

L'exemple suivant montre comment connecter PHP à MySQL en utilisant MySQLi avec une approche orientée objet. Il est recommandé de créer une base de données et un utilisateur dédiés pour votre application plutôt que d'utiliser le compte 'root'. Cette méthode renforce la sécurité de votre application.

<?php

$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // En production, créez une base de données et un utilisateur dédiés dans phpMyAdmin

$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
  die('Erreur de connexion : ' . $mysqli->connect_error);
}

echo 'Connexion réussie... ' . $mysqli->host_info . "\n";

$mysqli->close();

?>

Si vous préférez une approche procédurale, l'exemple ci-dessous montre comment établir une connexion avec MySQLi en style procédural. Comme toujours, il est conseillé d'utiliser une base de données dédiée et un utilisateur restreint pour renforcer la sécurité.

<?php

$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // Pour plus de sécurité, créez une base de données et un utilisateur dédiés dans phpMyAdmin

$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
  die('Erreur de connexion : ' . mysqli_connect_error($mysqli));
}

echo 'Succès : ' . mysqli_get_host_info($mysqli) . "\n";

mysqli_close($mysqli);

?>

PDO offre une méthode flexible pour connecter PHP à MySQL. L'exemple ci-dessous illustre comment utiliser PDO pour établir une connexion. Il aborde également les éventuels problèmes de certificat SSL qui peuvent survenir si votre système ne dispose pas des certificats d'autorité (CA).

<?php

$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // En environnement de production, pensez à créer une base de données et un utilisateur dédiés

$dsn = "mysql:host=$hostname;dbname=$database";

$options = array(
  // Si vous rencontrez une erreur du type "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1...",
  // cela peut être dû à l'absence de certificats CA dans le répertoire /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 'Vous êtes connecté à une base de données en version ' . $version[0] . "\n";

?>

Si vous voyez une erreur telle que Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed, il est probable que le répertoire /etc/ssl/certs/ de votre système ne contient pas les certificats CA nécessaires.

Si vous avez accès au système qui exécute votre code PHP, vous pouvez installer les certificats comme suit :

  1. Sur Ubuntu/Debian, exécutez sudo apt-get install ca-certificates
  2. Sur Alpine Linux, exécutez apk add ca-certificates

Si vous n'avez pas la possibilité d'installer ces certificats directement sur votre système, vous pouvez installer le certificat manuellement :

  1. Téléchargez le certificat sur votre ordinateur : https://letsencrypt.org/certs/isrgrootx1.pem
  2. Ajoutez le fichier isrgrootx1.pem dans les fichiers de votre projet PHP.
  3. Commentez la ligne PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/'
  4. Décommentez la ligne PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'

Pour renforcer la sécurité et faciliter la gestion de la configuration, il est recommandé de ne pas écrire vos identifiants en dur dans votre code source. Récupérez plutôt ces paramètres depuis des variables d'environnement comme illustré ci-dessous :

<?php

$hostname = getenv('STACKHERO_MYSQL_HOST');
$user = getenv('STACKHERO_MYSQL_USER');
$password = getenv('STACKHERO_MYSQL_PASSWORD');
$database = getenv('STACKHERO_MYSQL_USER'); // Par convention, le nom de la base de données correspond au nom d'utilisateur

?>

L'utilisation de variables d'environnement permet de sécuriser vos identifiants et rend votre configuration plus flexible selon les environnements.