Ergebnis 1 bis 12 von 12

Thema: [gelöst] Einfache Datenbankabfrage

  1. #1
    Contao-Nutzer
    Registriert seit
    25.12.2011.
    Beiträge
    77

    Standard [gelöst] Einfache Datenbankabfrage

    Hallo zusammen,

    ich lerne gerade PHP&MySQL und möchte deshalb gerne eine einfache Datenbankabfragen erstellen und diese ausgeben.

    Meine php-Datei liegt im templates-Ordner. Diese binde ich mit einem Insert-Tag in einen Artikel ein.

    PHP-Code:
    $this->import('Database');
    $result $this->Database->prepare("SELECT firstname FROM tl_member WHERE id=1")->execute();
    echo 
    $result
    Ich erhalte folgende Fehlermeldung:
    Recoverable error: Object of class Contao\Database\Mysql\Result could not be converted to string in /www/htdocs/.../templates/aufgabe.php on line 4

    Mir ist bekannt, dass in diesem spezifischen Fall ein Insert-Tag weiterhilft. Es geht aber vielmehr darum, wie ich in Contao grundsätzlich Datenabfragen erstelle.

    Danke für eure Hilfe!

    Beste Grüße,
    Troy
    Geändert von Troy (03.04.2013 um 13:03 Uhr)

  2. #2
    Alter Contao-Hase
    Registriert seit
    02.10.2010.
    Ort
    58636 Iserlohn
    Beiträge
    1.084

    Standard

    echo $result['firstname'];
    Meine Extensions: contentmodify, dca_editor

  3. #3
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Probier's mal mit z.B.

    PHP-Code:
    // Abfrageergebnis als Array
    $arrResult $result->fetchAll();

    // oder Abfrageergebnis als assoziatives Array
    $arrResult $result->fetchAllAssoc(); 
    Generell kommt bei Deiner Abfrage ein Objekt vom Typ Database_Result raus. Zu finden ist die dazugehörige Klasse in der Datei system/libraries/Database.php (Contao 2.x) oder in system/modules/core/library/Contao/Database/Result.php. Aber das ist für den Anfang wohl doch vielleicht etwas viel.
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  4. #4
    Contao-Nutzer
    Registriert seit
    25.12.2011.
    Beiträge
    77

    Standard

    @Thoni

    PHP-Code:
    $this->import('Database');
    $result $this->Database->prepare("SELECT firstname FROM tl_member WHERE id=1")->execute();
    echo 
    $result['firstname']; 
    ..führt zu
    Fatal error: Cannot use object of type Contao\Database\Mysql\Result as array in /www/htdocs/.../templates/aufgabe.php on line 4

    @webster
    PHP-Code:
    $this->import('Database');
    $result $this->Database->prepare("SELECT firstname FROM tl_member WHERE id=1")->execute();
    $arrResult $result->fetchAll(); 
    ...führt zu
    Fatal error: Call to undefined method Contao\Database\Mysql\Result::fetchAll() in /www/htdocs/.../templates/aufgabe.php on line 4
    (...eine Ausgabe von $arrResult habe ich mir daher gespart.)

    Aller Anfang ist schwer

  5. #5
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Contao 3.x? Da gibt es kein fetchAll() mehr. Nimm mal fetchAllAssoc()...
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  6. #6
    Alter Contao-Hase
    Registriert seit
    02.10.2010.
    Ort
    58636 Iserlohn
    Beiträge
    1.084

    Standard

    Das ist ein Beispiel für funktioniernden Code:
    PHP-Code:
    $this->import('Database'); 

    $sql $this->Database->prepare("SELECT * FROM tl_contentmodify WHERE published=? AND type=?")
                            ->
    execute('1','h');
    while(
    $sql->next())
    {
        echo (
    $sql->id);

    Hilft dir das weiter?
    Meine Extensions: contentmodify, dca_editor

  7. #7
    Contao-Nutzer
    Registriert seit
    25.12.2011.
    Beiträge
    77

    Standard

    Ja, es handelt sich um Contao 3.x

    Zumindest bekomme ich bei
    PHP-Code:
    $this->import('Database');
    $result $this->Database->prepare("SELECT firstname FROM tl_member WHERE id=1")->execute();
    $arrResult $result->fetchAllAssoc(); 
    keine Fehlermeldung mehr!

    Die Ausgabe habe ich versucht mit
    PHP-Code:
    echo $arrResult['firstname']; 
    aber es wird nichts angezeigt. Gibt man so nicht assoziative Arrays aus? Habe mich da an Thonis erstem Ansatz orientiert.

    Grundsätzliche Frage: Wo kann ich nachlesen, welche Methoden ich anwenden kann?
    Etwa hier? http://www.contao-docs.org/docs/Cont..._database.html

  8. #8
    Contao-Nutzer
    Registriert seit
    27.10.2010.
    Beiträge
    52

    Standard

    Versuch's mal so in Contao 3
    PHP-Code:
    $sql "SELECT firstname FROM tl_member WHERE id=1";
    $dbQuery Database::getInstance()->prepare($sql);
    $dbResult $dbQuery->execute();
    while(
    $row $dbResult->fetchRow()){
    echo 
    $row[0];

    Grüße

  9. #9
    Contao-Nutzer
    Registriert seit
    25.12.2011.
    Beiträge
    77

    Standard

    Dein Ansatz funktioniert, kobajashi.

    Eine Frage stellt sich mir jedoch noch. Wenn man PHP&MySQL lernt, kommt man mit der Methode fetch_row() in Kontakt. Warum heißt diese Methode hier fetchRow() und wo kann ich nachlesen, wie die Methoden in Contao (3.x) heißen?

    Danke für eure Hilfe!

    [Frage teilweise selbstbeantwortet]
    Folgender Code listet die einzelnen Methoden einer Klasse auf:
    PHP-Code:
    $class_methods get_class_methods('Database');

    foreach (
    $class_methods as $method_name) {
        echo 
    "$method_name\n";
        } 
    Ein Verzeichnis der Klassen, Methoden und Eigenschaften von Contao befindet sich hier:
    http://www.contao-docs.org/docs/Cont..._database.html
    Geändert von Troy (03.04.2013 um 08:02 Uhr)

  10. #10
    Contao-Nutzer
    Registriert seit
    27.10.2010.
    Beiträge
    52

    Standard

    ...bzw. hier:
    http://www.contao-docs.org/docs/Cont..._1_result.html

    Ich bin auch noch neu in PHP-OOP, bin aber ziemlich sicher, dass du keine fetch_row() Methode aufrufen kannst, da es sich hier um ein eigenes Contao Database-Objekt handelt.
    Dies kennt natürlich auch nur die ihm zur Verfügung stehenden Attribute und Methoden.

    Du meinst hingegen das Standard PHP MYSQLi-Datenbankobjekt. Dieses hat die von dir beschrieben Methode:
    http://php.net/manual/en/mysqli.summary.php

    Warum man in Contao nicht das Standard-MYSQLI-Objekt verwendet verstehe ich aber auch noch nicht...
    Großartige Videos rund um die Entwicklung zu Contao 3 findest du übrigens hier:
    https://bit3.de/de/news.html

    Grüße

  11. #11
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Zitat Zitat von kobajashi Beitrag anzeigen

    [...]
    Warum man in Contao nicht das Standard-MYSQLI-Objekt verwendet verstehe ich aber auch noch nicht...
    [...]
    Die Antwort findest Du hier: https://community.contao.org/de/show...ull=1#post6233

    Ob das in Contao 3.x auch noch so ist, weiß ich leider nicht - bin noch nicht wirklich dazu gekommen, mich damit auseinanderzusetzen. In 2.11.x ist es definitiv so
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  12. #12
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    Bei uns klappt folgendes:
    Code:
    $this->import('Database'); 
    $sql = $this->Database->prepare("SELECT * AS ausgabe FROM mm_xyz WHERE mm_xyz.name=? ")->execute(1);
    echo $sql->ausgabe;

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •