-
Database Multiple Insert
Hallo,
ich frage mich gerade, wie man mit der Datenbankabstraktion ein Multiple Insert macht.
Code:
INSERT INTO t1(c1) VALUES (1), (2), (3), (4), (5);
Ein Lsg. wäre eine foreach-Schleife, aber das gefällt mir nicht wirklich:
PHP-Code:
foreach($arrData as $data)
{
$set = array
(
'firstname' => $data[0],
'lastname' => $data[1],
);
$this->Database->prepare("INSERT INTO t1 %s")->set($set)->execute();
}
Vielleicht hat hier noch jemand eine bessere Lösung.
Thx
-
Das Array musst du natürlich mit der foreach-Schleife aufbauen, aber der ausführende Befehl kommt dann unter die Schleife.
PHP-Code:
foreach($arrData as $data)
{
$set = array
(
'firstname' => $data[0],
'lastname' => $data[1]
);
}
$this->Database->prepare("INSERT INTO t1 %s")->set($set);
-
@Andreas dein Code fügt nur den letzten Eintrag hinzu, ist also falsch.
@eddifuh mit Database_Statement::set lässt sich KEIN Multi Insert realisieren!
Kann man ganz einfach nachvollziehen: http://www.contao-docs.org/docs/Cont...ce.html#l00557
Entweder du machst es so, wie du bereits oben geschrieben hast oder du baust dein Statement von Hand zusammen.
-
@tril
Danke für die Antwort, dass habe ich mir schon fast gedacht.
-
Ups, sorry, da habe ich mich zu sehr auf diesen Satz verlassen 'Take an associative array'. Ich dachte, ich hätte das schonmal angewendet.
-
@Andreas: das Problem bei Deinem Code ist, daß Du in der Schleife über $arrData die Variable $set immer wieder neu setzt (und damit den zuvor gesetzten überschreibst).
Grüße,
Andreas
-
Ach, da gab es bei mir ein Verständnisproblem. Das Array habe ich mir gar nicht angesehen, nur copy and paste. Aber set() ist nur dafür da um mehrere Werte in einem Datensatz zu ändern/einzufügen. Will man mehrere Datensätze ändern/einfügen, dann ist das von eddifuh schon das richtige. Oder man baut es sich selbst zusammen http://www.php.net/manual/de/mysqli.multi-query.php. Eine multi_query-Methode ist in Contao noch nicht vorhanden.