I PDO associano i dati dei valori, non i nomi di tabelle e colonne.
Stai fraintendendo l'uso degli attacchi. Non è possibile associare nomi di tabelle e colonne con PDO. Associa i dati per inserirli IN quelle colonne. Devi costruire l'SQL per includere i nomi delle tabelle e le colonne usando le operazioni sulle stringhe.
Formatta i dati
Ho rinominato $column e $value in $column_array, $value_array per chiarire cosa sono e ho assunto che ciascuno sia un semplice array:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders ora si presenta così:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues ora appare così:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Costruisci, prepara, esegui
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Questo ti darà una dichiarazione preparata del modulo:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
È quindi possibile eseguire l'istruzione preparata e passare i valori $ come argomento.
$sql->execute($bindValues);
Nota:
- Un avvertimento che deve essere menzionato. Assicurati che i tuoi dati originali siano stati disinfettati contro SQL Injection. I PDO se ne occupano per i valori associati, ma se stai costruendo le colonne, ad esempio, dai dati $_POST, questo è vulnerabile e deve essere disinfettato.