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

Chèn một lượng lớn các biến vào bảng bằng cách sử dụng PDO

Truy vấn chuẩn bị động

Bạn có thể tạo truy vấn động từ mảng $ _POST:

Tuy nhiên, KHÔNG BAO GIỜ tin tưởng đầu vào của người dùng, có nghĩa là bạn không thể tin tưởng rằng dữ liệu trong $ _POST sẽ chứa các tên cột hợp lệ.

1. Vệ sinh dữ liệu bài đăng

Bạn có thể xác định một mảng tên cột trong danh sách trắng $whitelist = array('field1', 'field2', ...) , và sau đó sử dụng:

$data = array_intersect_key($_POST, array_flip($whitelist));

để tìm điểm giao nhau giữa các cột trong danh sách trắng và mảng $ _POST của bạn. (Cảm ơn @BillKarwin)

2. Tạo truy vấn

private function buildInsertSql($data, $table) {
    $columns = "";  
    $holders = "";  
    foreach ($data as $column => $value) {  
       $columns .= ($columns == "") ? "" : ", ";  
       $columns .= $column;  
       $holders .= ($holders == "") ? "" : ", ";  
       $holders .= ":$column";  
    }  
    $sql = "INSERT INTO $table ($columns) VALUES ($holders)";  
    return $sql; 
}

Điều này sẽ cung cấp cho bạn một câu lệnh SQL có dạng:

$sql = INSERT INTO directory (field1, field2) VALUES (:field1, :field2)

và chuẩn bị tuyên bố:

$stmt = $dbh->prepare($sql);

3. Tham số ràng buộc

Sau đó, bạn có thể liên kết động các tham số với trình giữ chỗ:

foreach ($data as $placeholder => $value) {
    $stmt->bindValue(":$placeholder", $value);
 }

và thực thi nó:

$stmt->execute();

Nâng cao hơn một chút ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Quyền truy cập bị từ chối đối với người dùng 'user' @ 'IP_ADDRESS' - Không cho phép truy cập từ xa đối với một số máy chủ đối với các máy chủ khác

  2. Lỗi mã hóa Unicode Bộ giải mã 'latin-1' không thể mã hóa ký tự '\ u2019'

  3. LỖI 1045 (28000):Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:KHÔNG)

  4. mySQL tìm ra các trò lừa đảo và loại bỏ chúng

  5. Giá trị đầu vào theo mảng sẽ chèn bản ghi trống trong mysql