Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstaw dużą ilość zmiennych do tabeli za pomocą PDO

Dynamiczne przygotowane zapytania

Możesz zbudować zapytanie dynamicznie z tablicy $_POST:

Ale NIGDY nie ufaj wprowadzanym przez użytkownika danych, co oznacza, że ​​nie możesz ufać, że dane w $_POST będą zawierać prawidłowe nazwy kolumn.

1. Oczyść dane postów

Możesz zdefiniować tablicę nazw kolumn z białej listy $whitelist = array('field1', 'field2', ...) , a następnie użyj:

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

aby znaleźć przecięcie między kolumnami na białej liście a tablicą $_POST. (Dzięki @BillKarwin)

2. Utwórz zapytanie

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

Otrzymasz instrukcję SQL w postaci:

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

i przygotuj oświadczenie:

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

3. Parametry wiązania

Następnie możesz dynamicznie powiązać parametry z symbolami zastępczymi:

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

i wykonaj go:

$stmt->execute();

Nieco bardziej zaawansowane...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Awaria MySQL Innodb

  2. mysql jeśli wiersz nie istnieje, pobierz domyślną wartość

  3. Mysql - wybierz identyfikatory pasujące do wszystkich tagów

  4. Mysql wybierz z logiką warunkową

  5. Zapętlanie wyników SQL w PHP — brak możliwości uzyskania całej tablicy