Ik heb mijn eerste PHP insert scriptje gemaakt, alleen hoe kan ik de foutafhandeling goed maken.
Zoals dat als nu maximaal aantal tekens gebruik is krijg ik warning enz.
De mysql-extensie gaat verdwijnen, het lijkt mij toch verstandig je vertrouwd te maken met mysqli of PDO. Tis gewoon een kwestie van wennen. En als je het vaag of onhandig vindt werken, zoek een (of maak je eigen) wrapper-class zodat je hetzelfde kunt doen met minder code.
mysqli_real_escape_string() verwacht precies 2 parameters, er is er maar 1 gegeven.
Dus dan wordt duidelijk dat we een parameter missen, en dus gaan we eens kijken op php.net.
We zien daar dat we de mysqli_real_escape_string-functie gebruiken, dus de procedurele manier, en dan zien we dus dat de opbouw (geen PHP-code) als volgt is:
In principe hanteert mysqli twee schrijfwijzen:
- een procedurele variant
- een object georienteerde variant
Om verschillende redenen is het verstandiger om de object georienteerde variant te gebruiken, al was het maar om de kortere code die dit oplevert.
Als je toch de procedurele variant wilt gebruiken zul je twee argumenten moeten opgeven.
De eerste parameter (het eerste argument) bevat je connectie-object, in jouw geval is dit $db.
De tweede parameter bevat de te escapen invoer.
Hierbij (bij het escapen van DATA) is het EXTREEM BELANGRIJK dat je de juiste character encoding selecteert bij het maken van een verbinding van je database.
Om het voordeel van een wrapper te illusteren: je zou voor het escapen van je data een methode kunnen maken:
De object georienteerde variant zou er zo uitzien:
<?php
$db->real_escape_string($input);
?>
En als je van een wrapper class gebruik zou maken blijft hier dit van over:
<?php
$db->escape($input);
?>
Een ander voordeel is dat je, in tegenstelling tot de eerste twee varianten, geen specifieke database(-extensie) functies gebruikt en daarmee het "hardcoden" hiervan verplaatst naar je wrapper class. Als je op een gegeven moment schakelt van de manier waarom je communiceert met je MySQL-database, dan hoef je dit soort functies niet te zoeken/vervangen in je code, maar in het meest gunstige geval hoef je alleen de implementatie van je wrapper class (op een plaats, in plaats van door heel je code) aan te passen.
Thomas, echt erg leuk dat je advies wilt geven, en ik waardeer het uiteraard, maar houd rekening ermee dat Niels beginner is. Methodes en (wrappper)-classes zijn in mijn ogen nog niet de dingen waar hij naar moet kijken.
Om op je wrapper-class terug te komen, je kan de MySQLi-class ook extenden om eigen functies te maken.