Les 10 — PDO, try/catch & SQL-injection
Veilig praten met MySQL via PDO; begrijpen waarom string-concat in SQL gevaarlijk is.
In deze les
Wat je gaat doen. Tabel tonen met PDO + try/catch, plus een UPDATE via de UI. Extra: prepared statements; injectie-notitie (alleen lokaal).
Wat je leert. PHP praat met MySQL via PDO; tekst plakken in SQL is gevaarlijk.
Komt aan bod. PDO, try/catch, query / exec, prepared statement, SQL-injection.
Demo (concept)
PDO fetch in het klein. Niet jouw show+update-UI. Extra A is een notitie over het idee (zie hieronder), geen demo-script.
Klik een bestand om de bron te zien (of “Nieuwe tab”). PHP draait bij jou lokaal in XAMPP.
Gewone opdracht
Opdracht 24 (kern)
- Maak in MySQL (XAMPP/phpMyAdmin) een kleine tabel (bijv. personen).
- Maak
10/show.phpdat data toont met PDO + try/catch (geen root-password hardcoden in commits — gebruik een config buiten git of duidelijke placeholders). - UI waarmee je een UPDATE op één/enkele rijen kunt doen en daarna het nieuwe resultaat ziet.
(Oorspronkelijk “op VPS”; hier: lokaal XAMPP + GitHub volstaat.)
Extra / variant
Extra A Injection-notitie
Extra A is een notitie, geen script inleveren.
Het idee: een zoekpagina haalt een naam uit $_GET (of een form) en plakt die als tekst in de SQL-string, ongeveer:
$name = $_GET['name']; $sql = "SELECT * FROM person WHERE first_name = $name";
Schrijf in 10/injectie-notitie.md (eigen woorden):
- Waarom deze query gevaarlijk is als
$namegeen gewone naam is, maar SQL. - Wat er op een testdb mis kan gaan (meer rijen dan bedoeld, of de zoekfilter valt weg).
- Hoe een prepared statement (placeholder
?of:naam+ bind) dat voorkomt.
Niet in git als werkend “hack-script”; niet op een echte database. Extra B is daarna jouw eigen show.php prepared maken.
Extra B Prepared statements
Zet je SELECT/UPDATE om naar prepared statements (named of positional placeholders).
Extra C — Opdrachten 6–8 CRUD-basis
Had je in les 03 extra B al een SELECT-tabel (MySQL-spoor): opdracht 6 is dan gedaan — hier herhalen met PDO mag. Anders: tabel + SELECT (6), INSERT via formulier (7), UPDATE via selectie + formulier (8), nu met PDO.
Opleveren
git add 10→ commit → push (geen echte wachtwoorden in de repo)- Mail: les 10 klaar of hulp + repo-link