Jag skulle göra så här:
Deklarera kolumnerna först. Vi kommer att använda dessa för att extrahera en delmängd av $_POST för användning som kolumner. Annars kan en användare skicka falska begärandeparametrar som inte matchar några kolumner i tabellen, vilket skulle bryta vår SQL.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
Skapa namngivna parameterplatshållare, dvs :username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
Forma SQL separat, eftersom det är lättare att läsa och felsöka om det finns i sin egen variabel.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
Alltid kontrollera om felstatus returneras från prepare()
och execute()
.
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
Här tar vi bara fälten i $_POST som matchar kolumnerna vi vill infoga.
$param_values = array_intersect_key($_POST, array_flip($columns));
Och skicka den arrayen till execute()
. Återigen, kolla efter felreturstatus.
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}