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

PDO PHP indsæt i DB fra et associativt array

Sidst jeg tjekkede, var det ikke muligt at udarbejde en erklæring, hvor de berørte kolonner var ukendte på forberedelsestidspunktet - men det ser ud til at virke - måske er dit databasesystem mere tilgivende end dem, jeg bruger (hovedsageligt postgres)

Det, der klart er forkert, er implode()-sætningen, da hver variabel skal håndteres af sig selv, skal du også have parenteser omkring feltlisten i insert-sætningen.

For at indsætte brugerdefinerede felter, tror jeg, du skal gøre sådan noget (i hvert fald sådan gør jeg det);

$fields=array_keys($a); // here you have to trust your field names! 
$values=array_values($a);
$fieldlist=implode(',',$fields); 
$qs=str_repeat("?,",count($fields)-1);
$sql="insert into user($fieldlist) values(${qs}?)";
$q=$DBH->prepare($sql);
$q->execute($values);

Hvis du ikke kan stole på feltnavnene i $a, skal du gøre noget lignende

foreach($a as $f=>$v){
   if(validfield($f)){
      $fields[]=$f;
      $values[]=$v;
   }
}

Hvor validfields er en funktion, du skriver, som tester hvert feltnavn og tjekker, om det er gyldigt (hurtigt og beskidt ved at lave en associativ matrix $valfields=array('name'=>1,'email'=>1, 'phone'=>1 ... og derefter tjekke for værdien af ​​$valfields[$f], eller (som jeg ville foretrække) ved at hente feltnavnene fra serveren)



  1. Opdater kolonne i database, hvor max værdi php mysql

  2. Opret en databasepostkonto (SSMS)

  3. Ukendt indledende tegnsætindeks '255' modtaget fra serveren

  4. Jquery stjernevurdering tutorial ved hjælp af php og mysql