PDO mengikat data nilai, bukan nama tabel dan kolom.
Anda salah memahami penggunaan binding. Anda tidak dapat mengikat nama tabel dan kolom dengan PDO. Anda mengikat data untuk memasukkan KE dalam kolom tersebut. Anda perlu membuat SQL untuk menyertakan nama tabel dan kolom menggunakan operasi string.
Memformat data
Saya telah mengganti nama $column dan $value Anda menjadi $column_array, $value_array untuk memperjelas apa itu, dan berasumsi bahwa masing-masing adalah array sederhana:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholder sekarang terlihat seperti ini:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues sekarang terlihat seperti ini:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Bangun, persiapkan, jalankan
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Ini akan memberi Anda pernyataan yang sudah disiapkan dalam formulir:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
Anda kemudian dapat mengeksekusi pernyataan yang telah disiapkan dan meneruskan $values sebagai argumen.
$sql->execute($bindValues);
Catatan:
- Satu peringatan yang harus disebutkan. Pastikan bahwa data asli Anda telah disanitasi terhadap SQL Injection. PDO menanganinya untuk nilai terikat, tetapi jika Anda membuat kolom dari, misalnya, data $_POST, ini rentan dan perlu dibersihkan.