Saya akan melakukannya dengan cara ini:
Deklarasikan kolom terlebih dahulu. Kami akan menggunakan ini untuk mengekstrak subset dari $_POST untuk digunakan sebagai kolom. Jika tidak, pengguna dapat mengirimkan parameter permintaan palsu yang tidak cocok dengan kolom tabel mana pun, yang akan merusak SQL kami.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
Buat placeholder parameter bernama yaitu :username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
Bentuk SQL secara terpisah, karena lebih mudah dibaca dan di-debug jika berada dalam variabelnya sendiri.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
Selalu periksa status kesalahan yang dikembalikan dari prepare()
dan execute()
.
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
Di sini kami mengambil hanya bidang $_POST yang cocok dengan kolom yang ingin kita sisipkan.
$param_values = array_intersect_key($_POST, array_flip($columns));
Dan berikan array itu ke execute()
. Sekali lagi, periksa status pengembalian kesalahan.
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}