sql >> Databáze >  >> RDS >> Mysql

PDO PHP vložit do DB z asociativního pole

Když jsem to naposledy kontroloval, nebylo možné připravit prohlášení, kde byly dotčené sloupce v době přípravy neznámé - ale zdá se, že to funguje - možná je váš databázový systém shovívavější než ty, které používám (hlavně postgres)

Co je zjevně špatné, je příkaz implode(), protože každá proměnná by měla být zpracována sama, potřebujete také závorky kolem seznamu polí v příkazu insert.

Chcete-li vložit uživatelem definovaná pole, myslím, že musíte udělat něco takového (alespoň tak, jak to dělám já);

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

Pokud nemůžete důvěřovat názvům polí v $a, musíte udělat něco jako

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

Kde validfields je funkce, kterou napíšete a která otestuje každý název pole a zkontroluje, zda je platný (rychle a špinavě vytvořením asociativního pole $valfields=array('name'=>1,'email'=>1, 'phone'=>1 ... a pak kontrola hodnoty $valfields[$f] nebo (jak bych preferoval) načtením názvů polí ze serveru)



  1. Jak mohu převést SQL Server 2008 DateTimeOffset na DateTime

  2. Výjimka PDO „nelze najít ovladač“ v php

  3. MultipleActiveResultSets=Skutečné nebo více připojení?

  4. Volání databázového pohledu v Yii pomocí Active Record