Skip to main content

PDO

Begrijp jij PDO?


Waarom kiezen we voor PDO boven oudere methodes zoals mysql_* of mysqli?

PDO is veiliger en flexibeler. Het helpt je om makkelijker over te stappen naar een andere database (bijvoorbeeld van MySQL naar SQLite). En het beschermt je beter tegen hackers die via je formulieren proberen in te breken in je database.


Wat is een DSN in PDO en waarom is het belangrijk om ook de charset (utf8mb4) op te nemen?

DSN betekent "Data Source Name". Dat is een stukje tekst waarin staat met welke database je verbinding maakt. De charset bepaalt hoe tekens worden opgeslagen, bijvoorbeeld emoji of letters met accenten. Met utf8mb4 voorkom je dat teksten verkeerd worden opgeslagen of kapot gaan.


Waarom is het handig om de verbinding (bijvoorbeeld connection.php) in een apart bestand te zetten?

Zo hoef je niet overal dezelfde code te typen. Als er iets verandert (zoals het wachtwoord), dan hoef je dat maar op één plek aan te passen. Je maakt je code netter, overzichtelijker en makkelijker te onderhouden.


Wat is het verschil tussen de database-instellingen op je eigen laptop en op een echte server?

Op je laptop gebruik je vaak "localhost" en een gebruiker zonder wachtwoord. Op een echte server is dat niet veilig, dus daar gebruik je andere gegevens. Het is belangrijk dat je die gegevens netjes gescheiden houdt, anders werkt je site straks niet online of wordt hij gehackt.


Wat is het verschil tussen query() en prepare() + execute()?

Met query() stuur je direct een SQL-opdracht. Met prepare() + execute() gebruik je een veilige manier waarbij je eerst zegt "wat je ongeveer wilt doen" en daarna de gegevens pas invult. Dat is veiliger, vooral bij gegevens van een formulier.


Hoe helpt prepare() om SQL-injecties te voorkomen?

Een SQL-injectie is als iemand iets raars intypt in een formulier om je database kapot te maken. prepare() zorgt ervoor dat die invoer niet als SQL-code wordt gezien, maar gewoon als tekst. Daardoor kunnen hackers niks kapot maken.


Waarom kiezen we voor de foutmodus ERRMODE_EXCEPTION?

Deze foutmodus geeft een duidelijke foutmelding als er iets misgaat, in plaats van dat de fout stiekem wordt genegeerd. Dat is handig bij het testen. Je ziet meteen wat er mis is en waar het gebeurt in je code.


Wat betekent PDO::ATTR_EMULATE_PREPARES => false, en waarom is dat slim?

Met deze instelling zeg je tegen PDO: gebruik de echte prepared statements van MySQL. Dat is meestal sneller en veiliger. Als je het aan laat staan (true), doet PHP het nep – en dat is niet altijd veilig.


Hoe haal je meerdere rijen uit een database met PDO?

Je doet eerst $stmt = $conn->query("SELECT ..."), dan gebruik je fetch() om één rij te krijgen of fetchAll() voor alles tegelijk. fetch() is handig als je maar één resultaat verwacht, zoals bij een login. fetchAll() gebruik je als je bijvoorbeeld een lijst van producten wilt laten zien.


Welke functies zou jij maken in een klasse die met PDO werkt?

Je zou een __construct() maken om de verbinding op te zetten, een query() of execute() functie voor het uitvoeren van opdrachten, en misschien een getRow() of getAll() functie om gegevens op te halen. Zo hoef je niet steeds dezelfde code te herhalen. Alles zit netjes in aparte functies.