Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP - Von MySQL vorbereitete Anweisung zum Einfügen eines Arrays

Nein ... das war definitiv schwieriger als PDO mit jedem Array, weil mysqli_stmt_bind_param() funktioniert ... und das funktioniert gut, indem Sie $array ändern zum Entfernen/Hinzufügen von Daten für andere Spalten.

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

Ich habe etwas Hilfe von diesen SO-Beiträgen bekommen:
- https://stackoverflow.com/a /15933696/623952
- https://stackoverflow.com/a/6179049/623952

Also... in $stmt->bind_param() Der erste Parameter ist ein String mit einem Zeichen für jeden übergebenen Parameter. Und dieses Zeichen repräsentiert den Datentyp des Parameters. Im obigen Beispiel sind beide Parameter Strings, also wird daraus ss . Auch im obigen Beispiel wird immer von einem String ausgegangen.

Ich habe dieses Diagramm in bind_param() gefunden Dokumentation:

Typen
Ein String, der ein oder mehrere Zeichen enthält, die die Typen für die entsprechenden Bind-Variablen spezifizieren:

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