Ergebnis 1 bis 8 von 8

Thema: undefined method named "set"

  1. #1
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    418

    Standard undefined method named "set"

    Guten Tag,

    ich möchte gern ein Array in eine Datenbank Eintragen bzw diesen eintrag updaten. Leider funktioniert das per Doctrine(? - Doctrine\DBAL\Connection) nicht mehr wie hier: https://de.contaowiki.org/Datenbank_Klasse_verwenden


    Code:
        $this->Database->prepare("UPDATE tl_bb_pwbme24 %s WHERE v_id=?")
                       ->set($set)
                       ->execute($execute);
    Code:
    Attempted to call an undefined method named "set" of class "Doctrine\DBAL\Statement"."
    hier finde ich leider nichts passendes:
    https://www.doctrine-project.org/pro...ipulation.html

  2. #2
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    459

    Standard

    Da bist du wahrscheinlich im letzten Jahrzehnt unterwegs, wenn du noch https://de.contaowiki.org nutzt
    Heutzutage über https://docs.contao.org/dev (Developer) oder https://docs.contao.org/manual (Benutzerhandbuch)

    Du brauchst die set() nicht mehr (weil es sie auch nicht mehr gibt laut deiner Fehlermeldung?) das geht auch über die execute, versuch es mal so (ungetestet):
    PHP-Code:
    $this->Database->prepare('"UPDATE tl_bb_pwbme24' 'Hier deine Sachen rein.. via PHP ' 'WHERE v_id=?"')
                            ->
    execute($id); // <-- Dein $idParam 

  3. #3
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    418

    Standard

    Zitat Zitat von zoglo Beitrag anzeigen
    Da bist du wahrscheinlich im letzten Jahrzehnt unterwegs, wenn du noch https://de.contaowiki.org nutzt
    Heutzutage über https://docs.contao.org/dev (Developer) oder https://docs.contao.org/manual (Benutzerhandbuch)

    Du brauchst die set() nicht mehr (weil es sie auch nicht mehr gibt laut deiner Fehlermeldung?) das geht auch über die execute, versuch es mal so (ungetestet):
    PHP-Code:
    $this->Database->prepare('"UPDATE tl_bb_pwbme24' 'Hier deine Sachen rein.. via PHP ' 'WHERE v_id=?"')
                            ->
    execute($id); // <-- Dein $idParam 
    hm ja das array aufzulösen und wie früher einfach in die datenbank anweisung zu schreiben funktioniert bestimmt - aber hat die set variante nicht zusätzliche Sicherheit geboten? Ausserdem ist es recht einfach und übersichtlich einfach ein riesiges array zu übergeben.

    die id bzw das ? übergeb ich mit execute.

  4. #4
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    459

    Standard

    Wenn doctrine die set-Methode nicht mehr hat, dann hat es wahrscheinlich evtk. mit Security, als auch KISS zu tun, dann wird das vorherige schon in der execute abgefangen.

    Magst du mal erklären, was du genau versuchst (was damals funktioniert hat).

  5. #5
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    418

    Standard

    Zitat Zitat von zoglo Beitrag anzeigen
    Wenn doctrine die set-Methode nicht mehr hat, dann hat es wahrscheinlich evtk. mit Security, als auch KISS zu tun, dann wird das vorherige schon in der execute abgefangen.

    Magst du mal erklären, was du genau versuchst (was damals funktioniert hat).

    naja ich habe ein array namens zB $set dort ist ein ganzer Datensatz drin

    $set['name'] = 'testname';
    $set['media'] = serialize($bildarray);
    $set['street'] = 'xssdaasd'

    usw dieses array hat man dann einfach per set übergeben und in die abfrage statt SET name = 'testname', ..... ein %s geschrieben.

    Ich denke dadurch wurde auch verhindert, dass der Code manipuliert werden kann => Oder war das nur das execute?
    Geändert von Nacht69 (01.04.2024 um 16:02 Uhr)

  6. #6
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    459

    Standard

    Nunja, den QueryBuilder von doctrine gibt es immer noch.
    Warum es aber undefined ist in deiner Installation ist fragwürdig, sofern du deine Doctrine Version auch aktualisiert hast :/

  7. #7
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    418

    Standard

    Zitat Zitat von zoglo Beitrag anzeigen
    Nunja, den QueryBuilder von doctrine gibt es immer noch.
    Warum es aber undefined ist in deiner Installation ist fragwürdig, sofern du deine Doctrine Version auch aktualisiert hast :/
    Habs nun so gelöst - denke das passt genau so gut:

    Code:
    foreach($set as $key => $value){
    $formattedPairs[] = $key." = ?";
     $execute[] = $value;
    }
    
    	 $execute[] = $record['id'];   
    
    $this->Database->prepare("UPDATE tl_bb_pwbme24 SET ".implode(', ', $formattedPairs)." WHERE v_id=?")
                       ->execute($execute);

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    PHP-Code:
    $this->connection->update('tl_bb_pwbme24'$set, ['v_id' => $record['id']]); 
    https://www.doctrine-project.org/pro...on.html#update
    Geändert von Spooky (01.04.2024 um 21:02 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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