[pdo] beveiligen
PDO tutorial van Joren leid ik af dat je op 2 manieren je input voor je queries kunt beveiligen.
Enerzijds kan je de method quote() gebruiken:
Anderzijds kun je gebruik maken van prepared statements:
Over de prepared statements zegt Joren het volgende:
Nu vraag ik me af... als ik een query niet vele malen achter elkaar wil uitvoeren, maar ik wil gewoon een eenmalige SELECT query uitvoeren. Ben ik dan beter af door gebruik te maken van de quote() method, of kan ik beter de prepared statements gebruiken?
Over prepared statements wordt ook dit gezegd:
Dit lijkt me gunstig als je dezelfde query meerdere keren achter elkaar moet uitvoeren, maar zou het voor 1 query juist niet vertragend werken?
Wie kan hier iets over zeggen, en vooral wat de beste/handigste methode is? Alvast dank voor jullie reacties!
Offtopic:
Wat ik trouwens raar vind... als je dit stukje bekijkt over de prepared statements...
...dan zie je dat de variabele $naam = 'Jan'; zomaar in de "open lucht" wordt toegekend, en dat deze niet aan de database wordt doorgegeven. Hoe kent PDO de waarde van $naam dan? Wordt er een soort tijdelijke global van gemaakt ozfo???
Uit de Enerzijds kan je de method quote() gebruiken:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$naam = $db->quote($_POST['naam']);
$sql = "INSERT INTO tabel (naam) VALUES ('".$naam."')";
$db->exec($sql);
?>
$naam = $db->quote($_POST['naam']);
$sql = "INSERT INTO tabel (naam) VALUES ('".$naam."')";
$db->exec($sql);
?>
Anderzijds kun je gebruik maken van prepared statements:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql = "INSERT INTO tabel (naam) VALUES (:naam)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':naam', $naam, PDO::PARAM_STR);
$naam = 'Jan';
$stmt->execute();
?>
$sql = "INSERT INTO tabel (naam) VALUES (:naam)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':naam', $naam, PDO::PARAM_STR);
$naam = 'Jan';
$stmt->execute();
?>
Over de prepared statements zegt Joren het volgende:
Quote:
Deze prepared statements bieden de programmeur de mogelijkheid tot het creeren van queries die veiliger zijn, waarvan de performance beter is en die eenvoudiger te noteren zijn. Het grote voordeel van prepared statements is dat een bepaalde query op een efficiente manier vele malen achter elkaar uitgevoerd kan worden.
Nu vraag ik me af... als ik een query niet vele malen achter elkaar wil uitvoeren, maar ik wil gewoon een eenmalige SELECT query uitvoeren. Ben ik dan beter af door gebruik te maken van de quote() method, of kan ik beter de prepared statements gebruiken?
Over prepared statements wordt ook dit gezegd:
Quote:
Bij het gebruik van prepared statements wordt er allereerst een template van de uit te voeren query naar de server gestuurd.
Dit lijkt me gunstig als je dezelfde query meerdere keren achter elkaar moet uitvoeren, maar zou het voor 1 query juist niet vertragend werken?
Wie kan hier iets over zeggen, en vooral wat de beste/handigste methode is? Alvast dank voor jullie reacties!
Offtopic:
Wat ik trouwens raar vind... als je dit stukje bekijkt over de prepared statements...
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql = "INSERT INTO tabel (naam) VALUES (:naam)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':naam', $naam, PDO::PARAM_STR);
$naam = 'Jan';
$stmt->execute();
?>
$sql = "INSERT INTO tabel (naam) VALUES (:naam)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':naam', $naam, PDO::PARAM_STR);
$naam = 'Jan';
$stmt->execute();
?>
...dan zie je dat de variabele $naam = 'Jan'; zomaar in de "open lucht" wordt toegekend, en dat deze niet aan de database wordt doorgegeven. Hoe kent PDO de waarde van $naam dan? Wordt er een soort tijdelijke global van gemaakt ozfo???
Gewijzigd op 07/05/2013 02:14:33 door Ozzie PHP
Er zijn nog geen reacties op dit bericht.