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

PHP - MySQL menyiapkan pernyataan untuk INSERT array

Tidak... ini jelas lebih sulit daripada PDO dengan larik apa pun karena cara mysqli_stmt_bind_param() berfungsi... dan ini berfungsi dengan baik dengan mengubah $array untuk menghapus/menambahkan data untuk kolom lain.

$mysqli = new mysqli('localhost', 'root', 'password', 'test');

$array  = array("name"=>"pineapple", "color"=>"purple"); 

$table_name = "fruit"; 



insert_data($mysqli, $array, $table_name);



function insert_data($mysqli, $array, $table_name) 
{
   $placeholders = array_fill(0, count($array), '?');

   $keys   = array(); 
   $values = array();
   foreach($array as $k => $v) {
      $keys[] = $k;
      $values[] = !empty($v) ? $v : null;
   }

   $query = "insert into $table_name ".
            '('.implode(', ', $keys).') values '.
            '('.implode(', ', $placeholders).'); '; 
   // insert into fruit (name, color) values (?, ?);    

   $stmt = $mysqli->prepare($query);

   // create a by reference array... 
   $params = array(); 
   foreach ($array as &$value) { 
      $params[] = &$value;
   }
   $types  = array(str_repeat('s', count($params))); 
   $values = array_merge($types, $params); 

   /*           
   $values = Array
      (
          [0] => ss
          [1] => pineapple
          [2] => purple
      ) 
   */

   call_user_func_array(array($stmt, 'bind_param'), $values); 

   $success = $stmt->execute();

   if ($success) { print "it worked..."; } 
           else { print "it did not work..."; }
}  

Saya mendapat bantuan dari posting SO ini:
- https://stackoverflow.com/a /15933696/623952
- https://stackoverflow.com/a/6179049/623952

Jadi... di $stmt->bind_param() parameter pertama adalah string yang memiliki satu karakter untuk setiap parameter yang dilewatkan. Dan karakter tersebut mewakili tipe data parameter. Pada contoh di atas, kedua parameter tersebut adalah string sehingga menjadi ss . Sebuah string juga selalu diasumsikan dalam contoh di atas.

Saya menemukan bagan ini di bind_param() dokumentasi:

jenis
Sebuah string yang berisi satu atau lebih karakter yang menentukan jenis untuk variabel mengikat yang sesuai:

Type specification chars  

Character    Description  
i            corresponding variable has type integer
d            corresponding variable has type double
s            corresponding variable has type string
b            corresponding variable is a blob and will be sent in packets


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan variabel sesi PHP dalam file MySQL yang dijalankan di PHP?

  2. permintaan mysql PHP:Saya ingin item tertentu menjadi yang pertama dan kemudian mengurutkan item lainnya

  3. tampilan hari melalui prosedur tersimpan

  4. MySQL - Perl:Cara mendapatkan array kode pos dalam x mil yang dikirimkan dari kode pos yang dikirimkan dalam contoh Perl

  5. Mengambil dan menampilkan Data untuk Setiap Pengguna Terdaftar di PHP menggunakan PDO