Ik zou het op deze manier doen:
Declareer eerst de kolommen. We zullen deze gebruiken om een subset van $_POST te extraheren voor gebruik als kolommen. Anders zou een gebruiker valse verzoekparameters kunnen doorgeven die niet overeenkomen met kolommen van de tabel, wat onze SQL zou breken.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
Maak benoemde parameterplaatsaanduidingen, bijv. :username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
Vorm de SQL afzonderlijk, omdat het gemakkelijker te lezen en te debuggen is als het in zijn eigen variabele staat.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
Altijd controleer op foutstatus geretourneerd door prepare()
en execute()
.
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
Hier nemen we alleen de velden van $_POST die overeenkomen met de kolommen die we willen invoegen.
$param_values = array_intersect_key($_POST, array_flip($columns));
En geef die array door aan execute()
. Controleer nogmaals op de status van de foutretour.
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}