Ben Zend_Db, birden çok satır ekleme destekler sanmıyorum.
Sadece iki satır ya da biraz daha fazla varsa, ama sadece bir döngü kullanabilirsiniz.
foreach ($data as $row)
{
$db->insert('table', $row)
}
Bill Karwin, a former Zend Framework developer, wrote
this on Nabble some time ago:
Satır kümeleri temelde bir koleksiyon nesnesi, bu yüzden satır kümesine eklenecek izin bu sınıfın yöntemleri eklersiniz. Peki bunu yapmak mümkün olmalıdır:
// creates a rowset collection with zero rows
$rowset = $table->createRowset();
// creates one row with unset values
$row = $table->createRow();
// adds one row to the rowset
$rowset->addRow($row);
// iterates over the set of rows, calling save() on each row
$rowset->save();
Bu N boş satırları oluşturmak için () createRowset bir tamsayı geçmek için hiçbir mantıklı. Sadece zaten değerler ile bunları doldurmak için bunların arasında dolaşmak gerekir. Yani siz de uygulama verileri tek tek satırları oluşturmak ve doldurmak için bir döngü yazmak ve sonra koleksiyonuna eklemek olabilir.
$rowset = $table->createRowset();
foreach ($appData as $tuple)
{
$row = $table->createRow($tuple);
$rowset->addRow($row);
}
$rowset->save();
Bu createRow bir başlığın geçen kullanım () ile uyumlu olacağından,) diziler dizisi createRowset (geçirilen izin için mantıklıdır.
$rowset = $table->createRowset($appData); // pass array of tuples
Bu kaydetmek için hazır yeni satır yeni bir satır kümesi, () d yaratarak, (sonunda () kaydetmek için hariç) yukarıdaki önceki örnekte olduğu gibi aynı döngü gerçekleştirmek olacaktır.
Ekleme verilerin verimliliğini artırmak için SQL iki yol vardır:
Birden fazla satır tek bir INSERT deyimini kullanın:
, T (sütun1, sütun2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) INSERT INTO
INSERT deyimi hazırlamak ve bunu birden çok kez çalıştırmak:
PREPARE INSERT INTO t (col1, col2, col3) VALUES (?, ?, ?);
EXECUTE 1, 2, 3
EXECUTE 4, 5, 6
EXECUTE 7, 8, 9
Ancak, bu gelişmeler birini destekleyen Satır ve satır kümesi sınıfları karmaşıklık eklersiniz. Bu akım Zend_Db_Table_Row sınıf takılı veya () tasarruf çağırdığınızda güncelleştirilmesi gerekiyor bir satır arasında ayrım iç yolu kaynaklanmaktadır. Bu ayrım Sıra nesnesi tarafından saklanmış, bu nedenle bireysel satırlar yeni satırlar veya mevcut satır değiştirilmiş kopya olup olmadığını satır kümesi bilmiyor. Bu nedenle daha verimli SQL kullanır () yöntemi bir kurtarış çoklu satır sunmak için satır kümesi sınıf için, kirli veri yönetimi tamamen refactored gerekir. Satır kümesi her biri () tasarruf çağırarak, onun satırları üzerinde yineleme için kolay bir çözümdür. O bir satır eklemek için optimize SQL yardımcı olmasa Bu, OO kapsülleme için iyidir.
Verimli SQL için büyük ihtiyaç var olduğunda herhangi bir durumda, bu, tipik bir web isteği veri toplu yük birçok satır gerçekten nadirdir. Satır küçük bir sayı için verimliliği fark küçüktür, bu nedenle toplu yükleme satır çok sayıda konum yalnızca gözle görülür bir gelişme olacaktır. Bu durumda, size başka bir RDBMS marka kullanmak eğer MySQL LOAD DATA deyimi veya eşdeğer özelliğini kullanıyor olmalıdır, zaten INSERT kullanarak olmamalıdır. INSERT genellikle çok sayıda veri yükleme için en verimli seçim değildir.
Dönen otomatik oluşturulan tuşları ile ilgili olarak, ben rahatsız olmaz. (Örneğin mysql CLI) düz SQL kullanmak, ve tek bir INSERT deyimi içinde birden çok satır eklerseniz, yalnızca eklenen tüm satırlar için id değerleri, son oluşturulan id değerini alabiliriz dikkat edin. Bu SQL davranıştır; herhangi bir dil veya herhangi bir çerçeve için doğrudur.
, T (sütun1, sütun2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) INSERT INTO
SELECT LAST_INSERT_ID(); -- returns only the id for the third tuple
Her satır için id ihtiyaç yaparsanız, bir döngü yazmak gerekir ve her satır eklendiğinde sonra oluşturulan id almak, Satırlar bir kerede bir tane yerleştirin.