BOB's binden waardegegevens, geen tabel- en kolomnamen.
U begrijpt het gebruik van bindingen verkeerd. U kunt met PDO geen tabel- en kolomnamen binden. U bindt gegevens om IN die kolommen in te voegen. U moet de SQL construeren om de tabelnamen en kolommen op te nemen met behulp van tekenreeksbewerkingen.
Maak de gegevens op
Ik heb je $column en $value hernoemd naar $column_array, $value_array om duidelijk te maken wat ze zijn, en aangenomen dat elk een eenvoudige array is:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders ziet er nu als volgt uit:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues ziet er nu als volgt uit:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Bouw, bereid, voer uit
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Dit geeft u een voorbereide verklaring van het formulier:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
U kunt dan het voorbereide statement uitvoeren en de $values als argument doorgeven.
$sql->execute($bindValues);
Opmerking:
- Een waarschuwing die moet worden vermeld. Zorg ervoor dat uw oorspronkelijke gegevens zijn gezuiverd tegen SQL-injectie. PDO's zorgen daarvoor voor de afhankelijke waarden, maar als u de kolommen construeert uit bijvoorbeeld $_POST-gegevens, is dit kwetsbaar en moet het worden opgeschoond.