2011-12-26 25 views

Respuesta

11

De la documentación del código de ignición insert_batch hacer este tipo de cosas

$data = array(
    array(
     'title' => 'My title' , 
     'name' => 'My Name' , 
     'date' => 'My date' 
    ), 
    array(
     'title' => 'Another title' , 
     'name' => 'Another Name' , 
     'date' => 'Another date' 
    ) 
); 

$this->db->insert_batch('mytable', $data); 

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date') 

Por lo que produciría sólo una consulta con todos los valores, normalmente de esta manera más rápida que hacen inserciones separadas.

6

Para responder a su pregunta: Utiliza una conexión.

1

En realidad, la respuesta @RageZ basada en el documento no siempre es correcta. Porque está totalmente basado en la cantidad de elementos que desea insertar. Al mirar codeigniter insert_batch() código, puede ver que cortan inserciones de lote en 100 elementos.

// Batch this baby (Around line number 1077 in codeigniter 2.x) 
for ($i = 0, $total = count($this->ar_set); $i < $total; $i = $i + 100) 
{ 
    $sql = $this->_insert_batch($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_keys, array_slice($this->ar_set, $i, 100)); 

    //echo $sql; 

    $this->query($sql); 
} 

Esto significa que sus valores serán rebanada a 100s inserciones y si se quite la parte echo $sql se puede ver de lo que parece a cuando se utiliza para la inserción por lotes 101 artículos. Por lo tanto, según sus preferencias de conexión, puede haber más de una conexión necesaria para insertar en db.

+0

@ La respuesta de Ragez puede haber sido cierta cuando se hizo esta pregunta, creo que estaba usando CI 1.xx –

+0

@amiawizard Eso puede ser correcto y la única forma de garantizarlo es mirar el código. Como sé, no han cambiado los documentos de esta parte de 1.x, pero es posible que el código haya cambiado de 1.x a 2.x – sobhan

+0

@amiawizard Revisé 1.7.1 y 1.7.3 y no hay función de inserción_batch en ellos y parece que esta función se introdujo en la versión 2.x https://github.com/EllisLab/CodeIgniter/blob/develop/user_guide_src/source/changelog.rst – sobhan

Cuestiones relacionadas