Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: Zugriff auf Tabellenspalte funktioniert nicht mehr unter PHP 7

  1. #1
    Contao-Nutzer
    Registriert seit
    25.04.2017.
    Beiträge
    3

    Standard Zugriff auf Tabellenspalte funktioniert nicht mehr unter PHP 7

    Hallo zusammen,

    bei einem Contao Projekt funktioniert der Zugriff auf die Tabellenspalten nicht mehr, nachdem ich auf PHP 7 gewechselt bin.

    Da ich zur Laufzeit den Namen der Tabellenspalte nicht kenne, lese ich erst mal die Namen der Tabellenspalten aus und schreibe sie in ein Array und versuche den Inhalt der Tabellenspalte dann auszugeben.
    Der Code sieht aktuell folgendermaßen aus:

    PHP-Code:
    $SQLSelect="SELECT * FROM meine_tabelle";
    $objItems=$this->Database->prepare($SQLSelect)->execute();

    //In dem Array $arrColumns stehen die Namen der einzelnen Spalten drin
    //Der Zugriff hat unter PHP 5 folgendermaßen noch gut funktioniert
    echo $objItems->$arrColumns['columnname'];

    //Unter PHP 7 ist der Inhalt jetzt aber leer
    //Wenn ich den Aufruf direkt über den Spaltenname mache, dann zeigt er mir den Inhalt korrekt an
    echo $objItems->columnname
    Wahrscheinlich muss der Wert $arrColumns['columnname'] noch irgendwie konvertiert werden, damit er das als Tabellenfeld interpretiert und nicht als einfachen String. Oder?

    liebe Grüße


    Heiko

  2. #2
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.612
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Willkommen in der Contao-Community!

    Warum fragst Du die Spalten nicht in der Datenbank ab?
    PHP-Code:
        $arrFields $this->Database->listFields('meine_tabelle'true); 

  3. #3
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von HeikoHa Beitrag anzeigen
    PHP-Code:
    echo $objItems->$arrColumns['columnname']; 
    Das ist ein Thema der anderen Syntax von PHP5 zu PHP7

    PHP-Code:
    echo $objItems->${arrColumns['columnname']}; 
    Siehe https://www.php.net/manual/de/migrat...compatible.php

    Edit: siehe auch #5!
    Geändert von fiedsch (05.04.2019 um 06:25 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  4. #4
    Contao-Nutzer
    Registriert seit
    25.04.2017.
    Beiträge
    3

    Standard

    Hallo,

    danke für Eure Antworten.
    Die Spaltennamen frage ich vorher auch noch über
    PHP-Code:
    $arrFields $this->Database->listFields('meine_tabelle'true); 
    ab.
    Zur weiteren Verarbeitung schreibe ich die Daten zuerst in ein Array und bereite die Daten weiter auf.

    Ich habe die Ausgabe dann auch mal wie im o.a. Beispiel probiert
    PHP-Code:
    echo $objItems->${arrColumns['columnname']}; 
    Hier liefert er mir aber auch nur einen leeren Wert.

    Dann habe ich mal folgendes ausprobiert und den Array-Wert explizit noch mal in einen String konvertiert, obwohl es ja eigentlich schon ein String ist:
    PHP-Code:
    $fieldname=(string)$arrColumns['columnname'];
    $item=$objFiles->$fieldname
    Und damit hat es funktioniert. Mir ist nur nicht klar. Warum?

    Gruß Heiko

  5. #5
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von HeikoHa Beitrag anzeigen
    Ich habe die Ausgabe dann auch mal wie im o.a. Beispiel probiert
    PHP-Code:
    echo $objItems->${arrColumns['columnname']}; 
    Hier liefert er mir aber auch nur einen leeren Wert.
    Ich fürchte, mein obiges Beispiel war falsch und sollte so lauten:

    PHP-Code:
      echo $objItems->{$arrColumns['columnname']}; 
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  6. #6
    Contao-Nutzer
    Registriert seit
    25.04.2017.
    Beiträge
    3

    Standard

    Hast recht. Ist auch unter Deinem mitgesendeten Link so angegeben.
    Vielen Dank. So funktioniert es.

    Gruß Heiko

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
  •