PDO:er binder värdedata, inte tabell- och kolumnnamn.
Du missförstår användningen av bindningar. Du kan inte binda tabell- och kolumnnamn med PDO. Du binder data för att infoga I dessa kolumner. Du måste konstruera SQL så att den inkluderar tabellnamn och kolumner med hjälp av strängoperationer.
Formatera data
Jag har bytt namn på din $column och $value till $column_array, $value_array för att göra det tydligt vad de är, och antagit att var och en är en enkel array:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders ser nu ut så här:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues ser nu ut så här:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Bygg, förbered, utför
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Detta kommer att ge dig en förberedd redogörelse för formuläret:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
Du kan sedan köra den förberedda satsen och skicka $värdena som ett argument.
$sql->execute($bindValues);
Obs!
- En varning som måste nämnas. Se till att dina ursprungliga data har sanerats mot SQL Injection. PDO:er tar hand om det för de bundna värdena, men om du konstruerar kolumnerna från till exempel $_POST-data är detta sårbart och måste saneras.