sql >> Database teknologi >  >> RDS >> Mysql

PDO bindParam problem

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.


  1. MySQL Fjerner duplikerede kolonner på Left Join, 3 tabeller

  2. Nogle ulemper ved at bruge datatypetekst til lagring af strenge?

  3. MySQL Kom omkring fejl 1093

  4. opret brugerdefineret funktion til datoforskel eksklusive weekender og helligdage i oracle sql