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

PDO PHP chèn vào DB từ một mảng kết hợp

Lần trước tôi đã kiểm tra, không thể chuẩn bị một câu lệnh trong đó các cột bị ảnh hưởng là không xác định tại thời điểm chuẩn bị - nhưng điều đó dường như hoạt động - có thể hệ thống cơ sở dữ liệu của bạn dễ tha thứ hơn so với hệ thống cơ sở dữ liệu tôi đang sử dụng (chủ yếu là postgres)

Điều rõ ràng là sai là câu lệnh implode (), vì mỗi biến sẽ do nó tự xử lý, bạn cũng cần có dấu ngoặc đơn xung quanh danh sách trường trong câu lệnh insert.

Để chèn các trường do người dùng xác định, tôi nghĩ bạn phải làm điều gì đó như thế này (ít nhất là cách tôi thực hiện);

$fields=array_keys($a); // here you have to trust your field names! 
$values=array_values($a);
$fieldlist=implode(',',$fields); 
$qs=str_repeat("?,",count($fields)-1);
$sql="insert into user($fieldlist) values(${qs}?)";
$q=$DBH->prepare($sql);
$q->execute($values);

Nếu bạn không thể tin tưởng các tên trường trong $ a, bạn phải làm điều gì đó như

foreach($a as $f=>$v){
   if(validfield($f)){
      $fields[]=$f;
      $values[]=$v;
   }
}

Trong đó các trường hợp lệ là một hàm mà bạn viết để kiểm tra từng tên trường và kiểm tra xem tên trường đó có hợp lệ không (nhanh chóng và dễ hiểu bằng cách tạo một mảng liên kết $ valfields =array ('name' => 1, 'email' => 1, 'phone' => 1 ... và sau đó kiểm tra giá trị của $ valfields [$ f] hoặc (nếu tôi muốn) bằng cách tìm nạp tên trường từ máy chủ)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đổi tên một cột trong MySQL

  2. Làm thế nào để trả về NULL khi kết quả trống?

  3. Vấn đề truy vấn Mysql

  4. MySql:nếu giá trị tồn tại CẬP NHẬT khác CHÈN

  5. Sự kiện Mysql không hoạt động