Jeg ville gøre det på denne måde:
Deklarer først kolonnerne. Vi bruger disse til at udtrække et undersæt af $_POST til brug som kolonner. Ellers kan en bruger sende falske anmodningsparametre, der ikke matcher nogen kolonner i tabellen, hvilket ville bryde vores SQL.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
Opret navngivne parameterpladsholdere, dvs. :username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
Form SQL'en separat, fordi det er nemmere at læse og fejlfinde, hvis det er i sin egen variabel.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
Altid tjek for fejlstatus returneret fra prepare()
og execute()
.
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
Her tager vi kun felterne i $_POST, der matcher de kolonner, vi ønsker at indsætte.
$param_values = array_intersect_key($_POST, array_flip($columns));
Og videregiv det array til execute()
. Kontroller igen for fejlreturstatus.
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}