Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PDO Chèn mảng sử dụng khóa làm tên cột

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()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));
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO ::PARAM cho kiểu thập phân?

  2. Lưu trữ hiệu quả 7.300.000.000 hàng

  3. LỖI 1356 (HY000):Xem các tham chiếu của 'mysql.user' không hợp lệ (các) bảng hoặc (các) cột hoặc (các) hàm hoặc bộ định nghĩa / người gọi của chế độ xem thiếu quyền sử dụng chúng

  4. Truy vấn con với EXISTS so với IN - MySQL

  5. php password_verify () hash và pass sẽ không khớp