PDO váží data hodnot, nikoli názvy tabulek a sloupců.
Špatně chápete použití vázání. Názvy tabulek a sloupců nelze svázat s PDO. Svážete data, která chcete vložit DO těchto sloupců. Musíte vytvořit SQL tak, aby zahrnoval názvy tabulek a sloupce pomocí řetězcových operací.
Formátujte data
Přejmenoval jsem váš $column a $value na $column_array, $value_array, aby bylo jasné, co to je, a předpokládal jsem, že každé je jednoduché pole:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders nyní vypadá takto:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues nyní vypadá takto:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Stavět, připravit, spustit
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Tím získáte připravený výpis formuláře:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
Poté můžete provést připravený příkaz a předat $values jako argument.
$sql->execute($bindValues);
Poznámka:
- Jedno upozornění, které je třeba zmínit. Ujistěte se, že vaše původní data byla dezinfikována proti SQL Injection. O to se u vázaných hodnot postarají PDO, ale pokud sloupce vytváříte například z dat $_POST, je to zranitelné a je třeba je dezinfikovat.