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

PHP - MySQL подготвен оператор за INSERT масив

Не... това определено беше по-трудно от PDO с какъвто и да е масив поради това как mysqli_stmt_bind_param() работи... и това работи добре чрез промяна на $array за премахване/добавяне на данни за други колони.

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

Получих помощ от тези SO публикации:
- https://stackoverflow.com/a /15933696/623952
- https://stackoverflow.com/a/6179049/623952

Така че... в $stmt->bind_param() първият параметър е низ, който има един знак за всеки предаден параметър. И този знак представлява типа данни на параметъра. В примера по-горе и двата параметъра са низове, така че става ss . В горния пример също винаги се приема низ.

Намерих тази диаграма в bind_param() документация:

видове
Низ, който съдържа един или повече знака, които определят типовете за съответните променливи за свързване:

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. Проблем с дизайна на MySQL Съхранени процедури. Рекусия или йерархия?

  2. Данни от низ, отрязани вдясно:1406 Данните са твърде дълги за колона

  3. Как да инсталирам MySQL и пакета MySQL на Python на OS X Leopard? Или как да науча как да бъда уеб разработчик с OS X?

  4. CakePHP заявка най-близката географска ширина и дължина от базата данни

  5. MySQL конзолата е бавна при импортиране на огромни SQL файлове