Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP - MySQL przygotował instrukcję do WSTAWIANIA tablicy

Nie... to było zdecydowanie trudniejsze niż PDO z jakąkolwiek tablicą, ponieważ mysqli_stmt_bind_param() działa... i działa to dobrze, zmieniając $array do usuwania/dodawania danych dla innych kolumn.

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

Otrzymałem pomoc z tych postów SO:
- https://stackoverflow.com/a /15933696/623952
- https://stackoverflow.com/a/6179049/623952

Więc... w $stmt->bind_param() pierwszy parametr to łańcuch, który ma jeden znak dla każdego przekazanego parametru. A ten znak reprezentuje typ danych parametru. W powyższym przykładzie oba parametry są ciągami, więc otrzymujemy ss . W powyższym przykładzie zawsze zakładany jest ciąg znaków.

Znalazłem ten wykres w bind_param() dokumentacja:

typy
Ciąg, który zawiera jeden lub więcej znaków, które określają typy odpowiednich zmiennych wiązania:

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. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Błąd łącza komunikacyjnego

  2. Jak wybierać rekordy jeden po drugim bez powtarzania?

  3. Jak warunkowo obsługiwać dzielenie przez zero w MySQL?

  4. Jak Zend DB zarządza połączeniami z bazą danych

  5. Sporadyczny wyjątek NullPointerException w ResultSetImpl.checkColumnBounds lub ResultSetImpl.getStringInternal