Mysql
 sql >> база данни >  >> RDS >> Mysql

PDO PHP вмъкване в DB от асоциативен масив

Последният път, когато проверих, не беше възможно да се подготви изявление, където засегнатите колони бяха неизвестни по време на подготовката - но това нещо изглежда работи - може би вашата система от база данни е по-прощаваща от тези, които използвам (главно postgres)

Това, което е очевидно неправилно, е изразът implode(), тъй като всяка променлива трябва да се обработва сама, вие също се нуждаете от скоби около списъка с полета в инструкцията за вмъкване.

За да вмъкнете потребителски дефинирани полета, мисля, че трябва да направите нещо подобно (поне така го правя аз);

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

Ако не можете да се доверите на имената на полетата в $a, трябва да направите нещо като

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

Където validfields е функция, която пишете, която тества всяко име на поле и проверява дали е валидно (бързо и мръсно чрез създаване на асоциативен масив $valfields=array('name'=>1,'email'=>1, 'phone'=>1 ... и след това проверка за стойността на $valfields[$f] или (както бих предпочел) чрез извличане на имената на полетата от сървъра)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Път за обучение на MySQL

  2. Как NOT REGEXP работи в MySQL

  3. Hibernate CriteriaBuilder, за да се присъедините към няколко таблици

  4. как да разбера дали колоната е първичен ключ с помощта на mysqli?

  5. PDO::PARAM за тип десетичен?