Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP - Câu lệnh chuẩn bị cho MySQL để CHÈN một mảng

Không ... điều này chắc chắn khó hơn PDO với bất kỳ mảng nào vì cách mysqli_stmt_bind_param () hoạt động ... và điều này hoạt động tốt bằng cách thay đổi $array để xóa / thêm dữ liệu cho các cột khác.

$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..."; }
}  

Tôi đã nhận được một số trợ giúp từ các bài đăng SO này:
- https://stackoverflow.com/a / 15933696/623952
- https://stackoverflow.com/a/6179049/623952

Vì vậy, ... trong $stmt->bind_param() tham số đầu tiên là một chuỗi có một ký tự cho mỗi tham số được truyền vào. Và ký tự đó đại diện cho kiểu dữ liệu tham số. Trong ví dụ trên, cả hai tham số đều là chuỗi nên nó trở thành ss . Một chuỗi cũng luôn được giả định trong ví dụ trên.

Tôi tìm thấy biểu đồ này trong bind_param() tài liệu:

loại
Một chuỗi chứa một hoặc nhiều ký tự chỉ định loại cho các biến ràng buộc tương ứng:

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. Khắc phục “ERROR 1222 (21000):Các câu lệnh SELECT đã sử dụng có một số cột khác nhau” khi sử dụng UNION trong MySQL

  2. Làm cách nào để thoát khỏi dấu nháy đơn (') trong MySql?

  3. bảng được chỉ định hai lần vừa là mục tiêu cho INSERT vừa là nguồn dữ liệu riêng biệt

  4. MySQL ALTER TABLE bị treo

  5. Sự khác biệt về TimeZone trong mysql và java