PHP Verbinden met MySQL
PHP 5 en hoger kunnen werken met een MySQL-database met behulp van:
- MySQLi-extensie (de "i" staat voor verbeterd)
- BOB (PHP-gegevensobjecten)
Eerdere versies van PHP gebruikten de MySQL-extensie. Deze extensie werd echter in 2012 stopgezet.
Moet ik MySQLi of PDO gebruiken?
Als je een kort antwoord nodig hebt, is het "Wat je maar wilt".
Zowel MySQLi als PDO hebben hun voordelen:
PDO werkt op 12 verschillende databasesystemen, terwijl MySQLi alleen werkt met MySQL-databases.
Dus als u uw project moet wijzigen om een andere database te gebruiken, maakt PDO het proces eenvoudig. U hoeft alleen de verbindingsreeks en een paar query's te wijzigen. Met MySQLi moet u de volledige code herschrijven, inclusief query's.
Beide zijn objectgeoriënteerd, maar MySQLi biedt ook een procedurele API.
Beide ondersteunen voorbereide verklaringen. Voorbereide verklaringen beschermen tegen SQL-injectie en zijn erg belangrijk voor de beveiliging van webtoepassingen.
MySQL-voorbeelden in zowel MySQLi- als PDO-syntaxis
In dit, en in de volgende hoofdstukken demonstreren we drie manieren om met PHP en MySQL te werken:
- MySQLi (objectgeoriënteerd)
- MySQLi (procedureel)
- BOB
MySQLi-installatie
Voor Linux en Windows: De MySQLi-extensie wordt in de meeste gevallen automatisch geïnstalleerd wanneer het php5 mysql-pakket is geïnstalleerd.
Ga voor installatiedetails naar: http://php.net/manual/en/mysqli.installation.php
BOB-installatie
Ga voor installatiedetails naar: http://php.net/manual/en/pdo.installation.php
Open een verbinding met MySQL
Voordat we toegang hebben tot gegevens in de MySQL-database, moeten we verbinding kunnen maken met de server:
Voorbeeld (MySQLi objectgeoriënteerd)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
Opmerking over het objectgeoriënteerde voorbeeld hierboven:
$connect_error was verbroken tot PHP 5.2.9 en 5.3.0. Als u compatibiliteit met PHP-versies ouder dan 5.2.9 en 5.3.0 wilt garanderen, gebruikt u in plaats daarvan de volgende code:
// Controleer verbinding
if (mysqli_connect_error()) {
die("Database-verbinding mislukt: " . mysqli_connect_error());
}
Voorbeeld (MySQLi procedureel)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
Voorbeeld (BOB)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
Opmerking: in het bovenstaande PDO-voorbeeld hebben we ook een database (myDB) gespecificeerd . Voor PDO is een geldige database vereist om verbinding mee te maken. Als er geen database is opgegeven, wordt een uitzondering gegenereerd.
Tip: Een groot voordeel van PDO is dat het een uitzonderingsklasse heeft om eventuele problemen in onze databasequery's op te lossen. Als er een uitzondering wordt gegenereerd binnen het blok try{ }, stopt het script met uitvoeren en stroomt het rechtstreeks naar het eerste blok catch(){}.
Sluit de verbinding
De verbinding wordt automatisch gesloten wanneer het script eindigt. Gebruik het volgende om de verbinding eerder te sluiten:
MySQLi object-georiënteerd:
$conn->close();
MySQLi-procedure:
mysqli_close($conn);
BOB:
$conn = null;