Udělal bych to takto:
Nejprve deklarujte sloupce. Použijeme je k extrahování podmnožiny $_POST pro použití jako sloupce. Jinak by uživatel mohl předat falešné parametry požadavku, které neodpovídají žádnému sloupci tabulky, což by narušilo naše SQL.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
Vytvořte pojmenované zástupné symboly, např. :username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
Vytvořte SQL samostatně, protože je snazší číst a ladit, pokud je ve vlastní proměnné.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
Vždy zkontrolujte chybový stav vrácený z prepare()
a execute()
.
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
Zde bereme pouze pole $_POST, která odpovídají sloupcům, které chceme vložit.
$param_values = array_intersect_key($_POST, array_flip($columns));
A předejte toto pole execute()
. Znovu zkontrolujte stav návratu chyby.
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}