PDO'er binder værdidata, ikke tabel- og kolonnenavne.
Du misforstår brugen af bindinger. Du kan ikke binde tabel- og kolonnenavne med PDO. Du binder data for at indsætte I disse kolonner. Du skal konstruere SQL'en til at inkludere tabelnavne og kolonner ved hjælp af strengoperationer.
Formatér dataene
Jeg har omdøbt din $column og $value til $column_array, $value_array for at gøre det klart, hvad de er, og antaget, at hver er en simpel matrix:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders ser nu sådan ud:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues ser nu sådan ud:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Byg, klargør, udfør
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Dette vil give dig en forberedt erklæring af formularen:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
Du kan derefter udføre den forberedte sætning og sende $værdierne som et argument.
$sql->execute($bindValues);
Bemærk:
- En advarsel, der skal nævnes. Sørg for, at dine originale data er blevet renset mod SQL Injection. PDO'er tager sig af det for de bundne værdier, men hvis du konstruerer kolonnerne ud fra f.eks. $_POST-data, er dette sårbart og skal renses.