PDO свързват стойностни данни, а не имена на таблици и колони.
Погрешно разбирате използването на обвързвания. Не можете да свързвате имена на таблици и колони с PDO. Обвързвате данни, за да вмъкнете В тези колони. Трябва да конструирате SQL, за да включите имената на таблиците и колоните, като използвате низови операции.
Форматирайте данните
Преименувах вашите $column и $value на $column_array, $value_array, за да стане ясно какво представляват, и предположих, че всеки е прост масив:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders сега изглежда така:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues сега изглежда така:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Създайте, подгответе, изпълнете
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Това ще ви даде подготвено изявление във формата:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
След това можете да изпълните подготвения оператор и да предадете $values като аргумент.
$sql->execute($bindValues);
Забележка:
- Едно предупреждение, което трябва да се спомене. Уверете се, че оригиналните ви данни са дезинфекцирани срещу SQL инжекция. PDO се грижат за това за свързаните стойности, но ако конструирате колоните от, да речем, $_POST данни, това е уязвимо и трябва да бъде дезинфекцирано.