Sicherheits behandlung von Variablen bei PDO Datenbank Abfragen
Urs
- datenbank
- mysqli
- php
Hallo,
ich versuche gerade in pdo einzusteigen. Ich habe gelesen, das dies ja die ganze Datenbank abfrage sicherer machen soll. Jetzt habe ich diesen Teil einen Scriptes und das einzige was bei einem übergebenen String behandelt wird ist trim. Muss eine VAR noch weiterbehandelt werden zu Sicherheit oder erledigt das das PDO, um sie in der Datenbank abzuspeichern?
if(isset($_GET['save'])) {
$save = $_GET['save'];
if($save == 'personal_data') {
$vorname = trim($_POST['vorname']);
$nachname = trim($_POST['nachname']);
$statement = $pdo->prepare("UPDATE users SET vorname = :vorname, nachname = :nachname, updated_at=NOW() WHERE id = :userid");
$result = $statement->execute(array('vorname' => $vorname, 'nachname'=> $nachname, 'userid' => $user['id'] ));
}}
Hallo Urs,
wenn Du mit prepared statements und Host-Variablen arbeitest, kümmert sich PDO um die kontextgerechte Behandlung. Du musst nichts weiter tun.
Aber:
$result = $statement->execute(
array(':vorname' => $_POST['vorname'],
':nachname'=> $_POST['nachname'],
':userid' => $user['id'] ));
Du kannst Dir auch noch überlegen, auf die neuere Notation für Arrays umzusteigen (seit PHP 5.4):
// alt:
ARRAY(':vorname' => $_POST['vorname'], ':nachname'=> $_POST['nachname'], ':userid' => $user['id'] )
// neu:
[':vorname' => $_POST['vorname'], ':nachname'=> $_POST['nachname'], ':userid' => $user['id']]
Rolf
blöde Frage!
Es funktioniert aber auch ohne den Doppeltpunkt.
Es funktinoert ohne
'vorname' => $vorname,
und mit
':vorname' => $vorname,
$statement = $pdo->prepare("UPDATE users SET vorname = :vorname, nachname = :nachname, updated_at=NOW() WHERE id = :userid");
$result = $statement->execute(array('vorname' => $vorname, 'nachname'=> $nachname, 'userid' => $user['id'] ));