Бих го направил по следния начин:
Първо декларирайте колоните. Ще ги използваме, за да извлечем подмножество от $_POST за използване като колони. В противен случай потребителят може да предаде фалшиви параметри на заявка, които не съвпадат с нито една колона на таблицата, което би нарушило нашия SQL.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
Създайте заместители на именувани параметри, т.е. :username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
Формирайте SQL отделно, защото е по-лесно за четене и отстраняване на грешки, ако е в собствена променлива.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
Винаги проверете за статус на грешка, върнат от prepare()
и execute()
.
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
Тук приемаме само полетата на $_POST, които съвпадат с колоните, които искаме да вмъкнем.
$param_values = array_intersect_key($_POST, array_flip($columns));
И предайте този масив на execute()
. Отново проверете за състоянието на връщане на грешка.
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}