sql >> Database >  >> RDS >> Mysql

PDO bindParam probleem

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.


  1. Hoe maak je een Oracle-reeks die begint met de maximale waarde uit een tabel?

  2. Kolom 'id' in waar clausule dubbelzinnig is

  3. laatste vrijdag van de maand in MySQL

  4. Hoe bouw ik een PDO-statement met parameters in PHP voor een dynamische query?