PHP: Verbinden met MySQL

Leer hoe u verbinding maakt met MySQL vanuit PHP met behulp van MySQLi en PDO

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare PHP cloud oplossing die tal van voordelen biedt, waaronder:

  • Implementeer uw applicatie in seconden met een eenvoudige git push.
  • Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
  • Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
  • Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de PHP cloud hosting oplossing van Stackhero te proberen!

Het volgende voorbeeld laat zien hoe u PHP met MySQL kunt verbinden met behulp van MySQLi in een objectgeoriënteerde stijl. Het is best practice om een speciale database en gebruiker voor uw applicatie te maken in plaats van het 'root'-account te gebruiken. Deze aanpak verbetert de beveiliging van uw applicatie.

<?php

$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // In productie, maak een speciale database en gebruiker aan in phpMyAdmin

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

echo 'Verbinding succesvol... ' . $mysqli->host_info . "\n";

$mysqli->close();

?>

Als u de voorkeur geeft aan een procedurele aanpak, laat het onderstaande voorbeeld zien hoe u een verbinding kunt maken met MySQLi in een procedurele stijl. Zoals altijd wordt het aanbevolen om een speciale database en een beperkte gebruiker te gebruiken voor verbeterde beveiliging.

<?php

$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // Voor verbeterde beveiliging, maak een speciale database en gebruiker aan in phpMyAdmin

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

echo 'Succes: ' . mysqli_get_host_info($mysqli) . "\n";

mysqli_close($mysqli);

?>

PDO biedt een flexibele methode om PHP met MySQL te verbinden. Het onderstaande voorbeeld illustreert hoe u PDO kunt gebruiken om een verbinding tot stand te brengen. Het behandelt ook mogelijke SSL-certificaatproblemen die kunnen optreden als uw systeem geen toegang heeft tot CA-certificaten.

<?php

$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // Voor productieomgevingen, overweeg om een speciale database en gebruiker aan te maken

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

$options = array(
  // Als u een fout tegenkomt zoals "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1...",
  // kan het zijn dat de /etc/ssl/certs/ directory geen CA-certificaten bevat
  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 'U bent verbonden met een database die versie ' . $version[0] . "\n";

?>

Als u een fout ziet zoals Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed, is het waarschijnlijk dat de /etc/ssl/certs/ directory van uw systeem niet de benodigde CA-certificaten bevat.

Als u toegang heeft tot het systeem dat uw PHP-code uitvoert, kunt u de certificaten als volgt installeren:

  1. Op Ubuntu/Debian, voer sudo apt-get install ca-certificates uit
  2. Op Alpine Linux, voer apk add ca-certificates uit

Als u geen directe toegang heeft om deze certificaten op uw systeem te installeren, kunt u het certificaat handmatig installeren:

  1. Download het certificaat naar uw computer: https://letsencrypt.org/certs/isrgrootx1.pem
  2. Voeg het isrgrootx1.pem bestand toe aan uw PHP-projectbestanden.
  3. Comment de regel PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' uit
  4. Uncomment de regel PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'

Voor verbeterde beveiliging en eenvoudigere configuratiebeheer wordt aanbevolen om uw inloggegevens niet hard te coderen in uw broncode. Haal in plaats daarvan deze instellingen op uit omgevingsvariabelen zoals hieronder getoond:

<?php

$hostname = getenv('STACKHERO_MYSQL_HOST');
$user = getenv('STACKHERO_MYSQL_USER');
$password = getenv('STACKHERO_MYSQL_PASSWORD');
$database = getenv('STACKHERO_MYSQL_USER'); // Volgens conventie komt de databasenaam overeen met de gebruikersnaam

?>

Het gebruik van omgevingsvariabelen helpt de beveiliging van uw inloggegevens te behouden en maakt uw configuratie beter aanpasbaar aan verschillende omgevingen.