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 PHP cloud platform dat is ontworpen voor snelle en betrouwbare deployments:

  • Deploy uw PHP-applicatie naar productie in enkele seconden met een eenvoudige git push.
  • Gebruik uw eigen domein, met automatisch geconfigureerde HTTPS-certificaten. Er zijn geen handmatige stappen nodig.
  • Vertrouw op automatische back-ups, one-click updates en duidelijke, voorspelbare prijzen. Stackhero regelt deze zaken, zodat u zich kunt richten op uw code.
  • Profiteer van uitstekende performance en security op een privé, dedicated infrastructuur die speciaal voor uw applicaties is gebouwd.

Maak uw workflow efficiënter en bespaar tijd. Beginnen met Stackhero's PHP cloud hosting duurt slechts een paar minuten.

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.