educom PHP-basis E-learning

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)

  1. Maak in MySQL (XAMPP/phpMyAdmin) een kleine tabel (bijv. personen).
  2. Maak 10/show.php dat data toont met PDO + try/catch (geen root-password hardcoden in commits — gebruik een config buiten git of duidelijke placeholders).
  3. 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):

  1. Waarom deze query gevaarlijk is als $name geen gewone naam is, maar SQL.
  2. Wat er op een testdb mis kan gaan (meer rijen dan bedoeld, of de zoekfilter valt weg).
  3. 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

  1. git add 10 → commit → push (geen echte wachtwoorden in de repo)
  2. Mail: les 10 klaar of hulp + repo-link

Door naar les 11 →