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

PDO PHP inserito nel DB da un array associativo

L'ultima volta che ho controllato, non è stato possibile preparare una dichiarazione in cui le colonne interessate erano sconosciute al momento della preparazione - ma quella cosa sembra funzionare - forse il tuo sistema di database è più clemente di quelli che sto usando (principalmente postgres)

Ciò che è chiaramente sbagliato è l'istruzione implode(), poiché ogni variabile dovrebbe essere gestita da sola, hai anche bisogno di parentesi intorno all'elenco dei campi nell'istruzione insert.

Per inserire campi definiti dall'utente, penso che tu debba fare qualcosa del genere (almeno così come lo faccio io);

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

Se non puoi fidarti dei nomi dei campi in $a, devi fare qualcosa del tipo

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

Dove campivalidi è una funzione che scrivi che verifica ogni nome di campo e controlla se è valido (rapido e sporco creando un array associativo $valfields=array('name'=>1,'email'=>1, 'phone'=>1 ... e poi controllando il valore di $valfields[$f], o (come preferirei) recuperando i nomi dei campi dal server)