Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PDO PHP masukkan ke DB dari array asosiatif

Terakhir kali saya memeriksa, tidak mungkin untuk menyiapkan pernyataan di mana kolom yang terpengaruh tidak diketahui pada waktu persiapan - tetapi hal itu tampaknya berhasil - mungkin sistem basis data Anda lebih pemaaf daripada yang saya gunakan (terutama postgres)

Yang jelas salah adalah pernyataan implode(), karena setiap variabel harus ditangani sendiri, Anda juga memerlukan tanda kurung di sekitar daftar bidang dalam pernyataan sisipan.

Untuk memasukkan bidang yang ditentukan pengguna, saya pikir Anda harus melakukan sesuatu seperti ini (setidaknya bagaimana saya melakukannya);

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

Jika Anda tidak dapat mempercayai nama bidang di $a, Anda harus melakukan sesuatu seperti

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

Di mana validfields adalah fungsi yang Anda tulis yang menguji setiap nama bidang dan memeriksa apakah itu valid (cepat dan kotor dengan membuat array asosiatif $valfields=array('name'=>1,'email'=>1, 'phone'=>1 ... dan kemudian memeriksa nilai $valfields[$f], atau (seperti yang saya inginkan) dengan mengambil nama bidang dari server)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Beberapa kolom di MATCH AGAINST

  2. Mengambil data dari Mysql DB ke listView menggunakan JSON dan PHP

  3. Bagaimana cara membandingkan string versi (x.y.z) di MySQL?

  4. MySQL Query ORDER BY nilai-nilai tertentu sebelum yang lain

  5. MySQL bersyarat ORDER BY ASC/DESC untuk kolom tanggal