sql >> Database >  >> RDS >> Mysql

PDO PHP invoegen in DB vanuit een associatieve array

De laatste keer dat ik het controleerde, was het niet mogelijk om een ​​verklaring voor te bereiden waarin de betrokken kolommen onbekend waren tijdens de voorbereiding - maar dat ding lijkt te werken - misschien is uw databasesysteem meer vergevingsgezind dan degene die ik gebruik (voornamelijk postgres)

Wat duidelijk verkeerd is, is de implode()-instructie, aangezien elke variabele op zichzelf moet worden afgehandeld, u hebt ook haakjes nodig rond de veldlijst in de insert-instructie.

Om door de gebruiker gedefinieerde velden in te voegen, denk ik dat je zoiets als dit moet doen (althans zo doe ik het);

$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);

Als u de veldnamen in $a niet kunt vertrouwen, moet u iets doen als

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

Waar validfields een functie is die u schrijft die elke veldnaam test en controleert of deze geldig is (snel en vies door een associatieve array te maken $valfields=array('name'=>1,'email'=>1, 'phone'=>1 ... en dan controleren op de waarde van $valfields[$f], of (zoals ik zou willen) door de veldnamen op te halen van de server)



  1. Een tabel koppelen aan een backend-database in Access 2016

  2. Wanneer een index toevoegen aan een SQL-tabelveld (MySQL)?

  3. Hoe een hint geven over de index die moet worden gebruikt in een MySQL-selectiequery?

  4. mysql - na invoegen negeer primaire sleutel