PDO - prepared statements & SQL Injections

DJLopez

Mitglied
Hallo,

EDIT: Geht um MySQL - ist aber an sich auch egal, da es afaik alle betrifft!

prepared statements sind wirklich toll, um SQL Injections vorzubeugen!
Leider gehen einige Sachen nicht so wie sie sollen :(

Beispiel:

PHP:
$sql = 'SELECT * FROM table WHERE ID = ?';
$stm = $link->prepare($sql);
$stm->bindParam(1,$_POST['ID']);
//... usw

Dolle Sache... da kann einem keiner komisch kommen, dass ist "unknackbar" =)

Nun, wenn ich jetzt aber das hier versuche, klappts nicht so recht

PHP:
$sql = 'SELECT * FROM table WHERE ID = ? LIMIT ?, ?';
$stm = $link->prepare($sql);
$stm->bindParam(1,$_POST['ID']);
$stm->bindParam(2,$_POST['startfrom']);
$stm->bindParam(3,$_POST['schrittweite']);
//... usw

Nun, das mag wohl daran liegen, dass PDO (also mysql oder der Treiber, is ja auch egal) nur zugewiesene Werte maskiert, nicht aber übergebene Tabellennamen, Spaltennamen oder eben Limitierungswerte :(

Tja, da der Limitierungswert aber nun übergeben werden muss, würde mich interessieren, wie man diese Werte ordentlich maskiert, bzw "sicher macht".

Ich würde aus dem Bauch heraus sowas machen:

PHP:
$start = (int)$_POST['startfrom'];
$weite = (int)$_POST['schrittweite'];

$sql = 'SELECT * FROM table WHERE ID = ? LIMIT '.$start.', '.weite;
$stm = $link->prepare($sql);
$stm->bindParam(1,$_POST['ID']);
//... usw

Ist das eine gute Idee? Eigentlich soll man ja keine Typen erzwingen (steht in einigen Handbüchern, ausserdem Grundtenor von vielen Leuten). Gibts bessere Wege?
 
Zuletzt bearbeitet:
Zurück