Tôi sẽ làm theo cách này:
Khai báo các cột trước. Chúng tôi sẽ sử dụng chúng để trích xuất một tập hợp con $ _POST để sử dụng làm cột. Nếu không, người dùng có thể chuyển các tham số yêu cầu không có thật không khớp với bất kỳ cột nào của bảng, điều này sẽ phá vỡ SQL của chúng tôi.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
Tạo trình giữ chỗ tham số được đặt tên, tức là :username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
Tạo SQL riêng biệt, vì nó dễ đọc và gỡ lỗi hơn nếu nó nằm trong biến riêng của nó.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
Luôn luôn kiểm tra trạng thái lỗi được trả về từ prepare()
và execute()
.
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
Ở đây chúng tôi lấy chỉ các trường $ _POST phù hợp với các cột mà chúng tôi muốn chèn.
$param_values = array_intersect_key($_POST, array_flip($columns));
Và chuyển mảng đó vào execute()
. Một lần nữa, hãy kiểm tra trạng thái trả lại lỗi.
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}