Hallo,
ist dieser Artikel im Wiki eigentlich noch aktuell?
https://de.contaowiki.org/Datenbank_Klasse_verwenden
Gibt es irgendwo BestPractices zum Bearbeiten von externen Datenbanken?
Viele Grüße
conter
Hallo,
ist dieser Artikel im Wiki eigentlich noch aktuell?
https://de.contaowiki.org/Datenbank_Klasse_verwenden
Gibt es irgendwo BestPractices zum Bearbeiten von externen Datenbanken?
Viele Grüße
conter
Nein, Contao 4.4 hat zwar diese Klasse noch, aber nur aus Gründen der Abwärtskompatibilität zu Contao 3
Contao 4 bzw. Symfony arbeitet mit Doctrine/dbal, damit kann man auch externe Datenbanken connecten, weil man auch mehrere Server definieren kann.
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
Das was du von hier bekommst ist ein Doctrine\DBAL\Connection Objekt, mit dem du folgendes machen kannst: http://docs.doctrine-project.org/pro...ipulation.html (siehe auch http://www.doctrine-project.org/api/...onnection.html).
Super, vielen Dank!
Das hilft und funktioniert!
Bedenke auch, dass man Datensätze aus sehr vielen Tabellen auch mit Models holen kann, was sehr einfach ist.
@spooky: Oder ist das auch veraltet, bzw. gibt es neue Models?
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
Nein, Models gibt es schon noch. Aber im anderen Thread ging es um eine zweite Datenbankverbindung - Models kann man nur mit der Default Datenbankverbindung benutzen.
Ja, klar, Models geht nicht mit externen DBs, habe das extern oben irgendwie überlesen. Wollte die Models auch nochmal erwähnt habe, weil ich immer wieder sehe, dass Leute einen Datensatz kompliziert mit Database holen, wo sie ihn mit Models holen könnten.
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
Hallöchen,
ich nutze bei einem Projekt auch derzeit die "alte" Contao Datenbank Klasse.
Wie würde z.B. folgender Code über die Doctrine/dbal Connection aussehen?
Code:$name=$_POST['name']; $email=$_POST['email']; $pic=($_FILES['photo']['name']); $set = array('name' => $name, 'email' => $email, 'photo' => $pic); Database::getInstance()->prepare("INSERT INTO teilnehmer %s")->set($set)->execute();
Also das ich miteine Verbindung zu einer zweiten Datenbank herstellen kann, verstehe ich.Code:$db = \System::getContainer()->get('doctrine.dbal.second_connection');
Aber wie sieht die Verbindung aus, wenn ich die Default Datenbank verbinden will?
Etwas so?
Wie mache ich dann z.B. eine einfache Datenbank Abfrage?Code:$db = \System::getContainer()->get('doctrine.dbal');
Etwa so?
Code:$sql = "SELECT * FROM tl_log WHERE id=?"; $stmt = $db->prepare($sql); $stmt->bindValue(1, $id); $stmt->execute();
PHP-Code:
$db = \Contao\System::getContainer()->get('database_connection');
$result = $db->executeQuery("SELECT * FROM tl_log WHERE id = ?", [$id])->fetch();
Cool, die Datenbank Verbindung funktioniert nun.
Aber wie gebe ich das Ergebnis in der While aus?
So funktioniert es bei mir leider nicht:
Code:while($result->next()) { echo $result->id; }
Dein SQL query fetched nur einen Eintrag. Wenn du mehrere Einträge fetchen willst, kannst du andere fetch Methoden verwenden. Oder auch:(ungetestet)PHP-Code:
$statement = $db->executeQuery("SELECT * FROM …", […]);
while ($result = $statement->fetch()) {
// …
}
Geändert von Spooky (14.03.2019 um 09:52 Uhr)
Danke Spooky. So funzt es jetzt :-)
Einen habe ich doch noch.
Wie sieht das ganze bei einem INSERT aus? Wenn ich also einen Datensatz anlegen möchte:
Ich hatte es so versucht, was aber leider nicht geklappt hat:Code:$set = array('tstamp' => time(), 'source' => 'BE', 'action' => 'GENERAL'); $objInsert = $this->Database->prepare("INSERT INTO tl_log %s")->set($set)->execute();
Code:$objInsert->executeSet("INSERT * FROM tl_log WHERE %s", [$set])->fetch();
https://www.doctrine-project.org/pro...on.html#insert
Warum willst du das bei tl_log überhaupt so machen?
Ahhh ja. Prima. Funzt auch.
Die tl_log war einfach nur ein Beispiel ;-) Hätte auch jede andere Tabelle sein können.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)