PDO wiążą dane wartości, a nie nazwy tabel i kolumn.
Nie rozumiesz używania wiązań. Nie można powiązać nazw tabel i kolumn z PDO. Wiążesz dane, aby wstawić do tych kolumn. Musisz skonstruować kod SQL, aby zawierał nazwy tabel i kolumny za pomocą operacji na ciągach.
Sformatuj dane
Zmieniłem nazwy twoich $column i $value na $column_array, $value_array, aby było jasne, czym one są, i założyłem, że każda z nich jest prostą tablicą:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders wygląda teraz tak:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues wygląda teraz tak:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Buduj, przygotuj, wykonaj
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
W ten sposób otrzymasz przygotowane oświadczenie w postaci:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
Następnie możesz wykonać przygotowaną instrukcję i przekazać $wartości jako argument.
$sql->execute($bindValues);
Uwaga:
- Jedno zastrzeżenie, o którym należy wspomnieć. Upewnij się, że oryginalne dane zostały oczyszczone przed wstrzyknięciem SQL. PDO dbają o to dla wartości powiązanych, ale jeśli konstruujesz kolumny z, powiedzmy, danych $_POST, jest to podatne na ataki i wymaga oczyszczenia.