Uitleg PHP en MySQL
Als je PHP gebruikt om gegevens op te halen uit een database, kun je dat doen op twee manieren: proceduraal (zoals mysqli_query($conn, ...)) of objectgeoriënteerd. De objectgeoriënteerde stijl maakt gebruik van objecten en methodes en is wat netter en overzichtelijker, vooral als je meerdere query’s doet. Wij gaan werken met de objectgeoriënteerde versie.
Verbinding maken met de database
De verbinding wordt gemaakt via een nieuw object van de klasse mysqli.
<?php
$mysqli = new mysqli("localhost", "gebruikersnaam", "wachtwoord", "databasenaam");
// voorbeeld lokaal:
$mysqli = new mysqli("localhost", "root", "", "routeplanner");
// Foutafhandeling
if ($mysqli->connect_error) {
die("Verbinding mislukt: " . $mysqli->connect_error);
}
Een SELECT-query uitvoeren
<?php
$resultaat = $mysqli->query("SELECT * FROM locaties");
while ($rij = $resultaat->fetch_assoc()) {
echo $rij['naam'] . " (" . $rij['x'] . ", " . $rij['y'] . ")<br>";
}
Een INSERT-query uitvoeren
<?php
$sql = "INSERT INTO locaties (naam, x, y) VALUES ('Nieuwplein', 4, 5)";
$mysqli->query($sql);
if ($mysqli->affected_rows > 0) {
echo "Toevoegen gelukt.";
}
Gebruik van prepare bij INSERT
Let op: Een gewone
query()met geïnjecteerde waarden is niet veilig. Bijvoorbeeld:$naam = $_POST['naam']; $sql = "INSERT INTO locaties (naam, x, y) VALUES ('$naam', 3, 5)"; $mysqli->query($sql);Invoer zoals
Centrum'); DROP TABLE locaties; --kan tot SQL-injectie leiden.
Gebruik daarom prepare() en bind_param():
<?php
$stmt = $mysqli->prepare("INSERT INTO locaties (naam, x, y) VALUES (?, ?, ?)");
$naam = $_POST['naam'];
$x = (int) $_POST['x'];
$y = (int) $_POST['y'];
$stmt->bind_param("sii", $naam, $x, $y); // s = string, i = integer, d = double
$stmt->execute();
if ($stmt->affected_rows > 0) {
echo "Nieuwe locatie toegevoegd.";
} else {
echo "Er ging iets mis.";
}
$stmt->close();
Gebruik van prepare bij SELECT
Voorbeeld: alle bestellingen op een bepaald tijdstip (bijv. 10:30:00).
<?php
$stmt = $mysqli->prepare("SELECT klantnaam, tijd FROM bestellingen WHERE tijd = ?");
$tijd = $_GET['tijd']; // bijvoorbeeld: '10:30:00'
$stmt->bind_param("s", $tijd); // 's' voor string
$stmt->execute();
$resultaat = $stmt->get_result();
while ($rij = $resultaat->fetch_assoc()) {
echo "Klant: " . $rij['klantnaam'] . " – Tijd: " . $rij['tijd'] . "<br>";
}
$stmt->close();
Tot slot: verbinding sluiten
<?php
$mysqli->close();