Skip to main content

PDO

1 Verbinden met een database

🎯 Leerdoelen

  • Je weet wat PDO is en waarom het gebruikt wordt.
  • Je kunt verbinding maken met een database via PDO.
  • Je begrijpt waarom het handig is om een apart bestand voor de connectie te maken.

πŸ’‘ Uitleg

PDO (PHP Data Objects) is een moderne manier om met databases te werken in PHP. Het ondersteunt meerdere soorten databases zoals MySQL, SQLite en PostgreSQL, maar in deze lessen gebruiken we alleen MySQL.

image.png

Je maakt verbinding met een database via een zogeheten DSN (Data Source Name) en slaat de connectie op in een variabele. Om herhaling te voorkomen, zet je dit in een apart bestand zoals connection.php. Dit maakt het ook makkelijk om de instellingen aan te passen wanneer je de website van je localhost naar een liveserver verplaatst.

connection.php 

Het bestand connection.php bevat de code om verbinding te maken met de database. In plaats van in elk PHP-bestand opnieuw een connectie te moeten schrijven, zet je die één keer netjes in dit aparte bestand. Zo houd je je code overzichtelijk en voorkom je fouten.

Door connection.php te gebruiken, hoef je later bij het online zetten van je site alleen in dat ene bestand de instellingen aan te passen (zoals wachtwoord of host), in plaats van in alle bestanden waar je met de database werkt.

<?php
$dsn = 'mysql:host=localhost;dbname=database_name;charset=utf8mb4';
$user = 'root';
$pass = '';

try {
  $pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
  echo "Verbinding mislukt: " . $e->getMessage();
}

In het connection.php bestand wordt de database naam, en het user id en password ingesteld. Op een XAMPP ontwikkel server is standaard de user root en heeft geen password. Op een productieserver is dat natuurlijk ander!

🚰 Opdracht

  1. Maak een database voorbeeld aan met één tabel dieren met de kolommen id (INT, AUTO_INCREMENT, PRIMARY KEY), naam (VARCHAR), en soort (VARCHAR).
  2. Maak een bestand connection.php dat de connectie maakt zoals hierboven.
  3. Maak een tweede bestand testverbinding.php waarin je require 'connection.php'; gebruikt om verbinding te maken.
  4. Laat met echo zien of de verbinding is gelukt (bijv. "Verbinding gelukt!").

🧠 Reflectie

  • Welke manieren zijn er in PHP om met een database te werken, en waarom gebruiken wij PDO?
  • Wat zijn voordelen van een apart connection.php bestand?
  • connection.php heeft op een development omgeving een andere inhoud dan op een productieserver. Wat is het verschil en waarom?

πŸ“„ Inleveren

  • Beantwoord in eigen woorden de reflectievragen (txt of pdf).

2 Gegevens uitlezen met SELECT

🎯 Leerdoelen

  • Je weet hoe je gegevens uit een MySQL-database ophaalt met PDO.
  • Je kunt een SELECT-query uitvoeren via PDO.
  • Je kunt resultaten weergeven in HTML via PHP.

πŸ’‘ Uitleg

In deze opdracht gebruik je een bestaande database met studentgegevens. Je voert met behulp van PDO een SELECT-query uit en toont de resultaten in een HTML-tabel.

student.sql gebruikenDatabase

Je gebruikt een SQL-bestand student.sql om snel een database en tabel aan te maken met voorbeeldgegevens:

  1. Open phpMyAdmin (via XAMPP of MAMP).
  2. Klik op "Importeren".
  3. Selecteer het bestand student.sql dat je van je docent krijgt of downloadt.
  4. Klik op "Start" om het script uit te voeren. Je krijgt nu een database met de tabel studenten.

Voorbeeldread.php

–

Maak studentgegevensread.php ophalen:en zet daar deze code in:

<?php
require 'connection.php';

$sql = "SELECT *id, voornaam, achternaam, woonplaats FROM studenten";
$stmt = $pdo->query($sql);
$studenten = $stmt->fetchAll();
?>
<table border="1">
  <tr>
    <th>ID</th>
    <th>Naam</th>
    <th>Woonplaats</th>
  </tr>
  <?php foreach ($studenten as $student): ?>
  <tr>
    <td><?= $student['id'] ?></td>
    <td><?= $student['voornaam'] . ' ' . $student['achternaam'] ?></td>
    <td><?= $student['woonplaats'] ?></td>
  </tr>
  <?php endforeach; ?>
</table>

πŸ› οΈ Opdracht – studentenlijst weergeven

  1. Importeer student.sql in phpMyAdmin om de database en tabel aan te maken.
  2. Maak een bestand studentenlijst.read.php.
  3. GebruikMaak een require 'connection.php';php ombestand verbindingzoals tedat maken.in de vorige les is uitgelegd.
  4. Gebruik de gegeven code en test of de code.lijst met studenten goed wordt weergegeven.
  5. InExtra (otionele) opdracht: Voeg de databasekolom staatemail toe aan je SELECT-query en aan de HTML-tabel. Zorg ervoor dat het e-mailadres klikbaar is via een email.mailto: Voeg dit toe zodat de email van elke student uit de database wordt gehaald en wordt getoond.link.

🧠 Reflectie

(zoals altijd: leg uit in eigen woorden!)

  • Waar en hoe wordt het connection.php bestand ingelezen in read.php?
  • Wat doet $pdo->query() precies?
  • Wat is het verschil tussen fetch() en fetchAll()?
  • Hoe toon je data uit een array netjes in een HTML-tabel?
  • Wat doet een mailto:-link precies?

πŸ“€ Inleveren

  • Lever het bestand studentenlijst.read.php in via Teams of Canvas.
  • Beantwoord de reflectievragen in een .txt of .pdf bestand en lever die ook in.

3 Studentgegevens toevoegen

🎯 Leerdoelen

  • Je weet hoe je data toevoegt aan een database met PDO.
  • Je kunt een formulier maken en de ingevoerde gegevens veilig verwerken.
  • Je begrijpt het gebruik van prepare() en execute() in PDO.

πŸ’‘ Uitleg

Als je gegevens naar de database wilt sturen (bijvoorbeeld via een formulier), gebruik je een INSERT-query. Bij PDO doe je dit veilig met prepare() en execute(). Zo voorkom je problemen zoals SQL-injectie. SQL-injectie kan worden gebruikt om te 'hacken' en wordt later in een ander module uitgelegd.

Je gebruikt prepare() om de query voor te bereiden met placeholders (:naam), en daarna geef je met execute() de daadwerkelijke waarden door.

Voorbeeld – voorbereiding op INSERT

Maak een bestand create.php met deze HTML en PHP-code:

<?php
require 'connection.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $sql = "INSERT INTO studenten (voornaam, achternaam, woonplaats, email)
          VALUES (:voornaam, :achternaam, :woonplaats, :email)";
  $stmt = $pdo->prepare($sql);
  // Vul hier de juiste execute() aan
}
?>

<form method="post">
  <label>Voornaam: <input type="text" name="voornaam"></label><br>
  <label>Achternaam: <input type="text" name="achternaam"></label><br>
  <label>Woonplaats: <input type="text" name="woonplaats"></label><br>
  <label>E-mail: <input type="email" name="email"></label><br>
  <button type="submit">Toevoegen</button>
</form>

πŸ› οΈ Opdracht – student toevoegen via formulier

  1. Maak het bestand create.php aan en zet de code hierboven erin.
  2. Test of het formulier zichtbaar is in je browser.
  3. Vul de ontbrekende code aan: zorg dat de execute() functie de juiste data gebruikt uit het formulier.
  4. Voeg een echo toe na het invoegen (bijv. β€œStudent toegevoegd!”) zodat je weet dat het gelukt is.
  5. Controleer in phpMyAdmin of de student correct is toegevoegd aan de database.

🧠 Reflectie

(zoals altijd: leg uit in eigen woorden!)

  • Waarom gebruik je prepare() in plaats van direct een query uitvoeren?
  • Hoe weet PHP welke waarden in de query moeten komen?
  • Wat is de functie van regel 4 (de regel die met if begint)?

πŸ“€ Inleveren

  • Lever het bestand create.php in via Teams of Canvas.
  • Beantwoord de reflectievragen in een .txt of .pdf bestand en lever die ook in.