Ergebnis 1 bis 13 von 13

Thema: SQL Statement und insertId

  1. #1
    Contao-Nutzer
    Registriert seit
    18.02.2010.
    Beiträge
    163

    Standard SQL Statement und insertId

    Hallo Gemeinde,

    ich versuche gerade in einem Template den AUTO_INCREMENT Wert einer Tabelle abzufragen, aber irgendwie erhalte ich keinen Wert.

    PHP-Code:
    $insertId = \Database::getInstance()->execute("SELECT id FROM meineTabelle")->insertId;
      echo 
    $insertId
    Hab ich das mit dem insertId falsch verstanden oder wo ist das Problem?

  2. #2
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Will jetzt nicht bei github mit dem Handy suchen, aber ich meine, die sollte doch insert_id heissen, nicht "insertId"...

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

    Support Contao

    Standard

    Mit SELECT bekommst Du immer 1 oder mehrere Datensätze als Ergebnis. Die IDs kannst Du dann aus den Ergebnissen herauslesen und verwenden.

    Anders ist es bei INSERT INTO, dort übergibst Du ja nicht die ID, denn diese wird automatisch beim Anlegen des Datensatzes generiert. In diesem Fall kannst Du die ID über ->insertId heraus bekommen, um weitere Querys mit diesem Datensatz auszuführen.

  4. #4
    Contao-Nutzer
    Registriert seit
    18.02.2010.
    Beiträge
    163

    Standard

    Danke schonmal für die Antworten.

    Vielleicht gehe ich die Sache falsch an, bzw. sollte näher erklären, was Sache ist:

    Ich habe ein FE-Formular, dessen Eingaben in einer Tabelle gespeichert werden.
    Das Formular hat auch ein verstecktes Feld entry_id. Dieses wird befüllt über ein eigenes Insert-Tag, definiert durch replaceInsertTag()...

    Und in dieser Funktion möchte ich eben prüfen, wie bei dieser Tabelle der AUTO_INCREMENT aktuell steht.
    Daher wird mir INSERT nichts bringen, fürchte ich.

  5. #5
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    also wenn ich mich nicht irre bekommst du die insertId nur, wenn du über die Datenbankklasse auch einen Datensatz in die Tabelle schreibst (per INSERT INTO....). Du hingegen holst dir ja nur einen Datensatz aus der Tabelle raus und bekommst auch nur den DATENSATZ bzw. die DATENSÄTZE die du abgefragt hast.

    Den Wert den du möchtest, gehört aber generell zur Tabelle und nicht einem speziellen Datensatz.

    So gehts:
    PHP-Code:
    $intInsertId Database::getInstance()->getNextId('tl_Tabellenname');
    echo 
    $intInsertId
    Geändert von the_scrat (18.04.2017 um 22:16 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

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

    Standard

    Zitat Zitat von d23 Beitrag anzeigen
    Ich habe ein FE-Formular, dessen Eingaben in einer Tabelle gespeichert werden.
    Das Formular hat auch ein verstecktes Feld entry_id. Dieses wird befüllt über ein eigenes Insert-Tag, definiert durch replaceInsertTag()...
    Verstehe ich das richtig: Du fügst die Formulardaten in die Datenbank ein und willst dabei via hidden form field die ID übergeben, die die Datenbank als nächstes bei AUTO INCREMENT vergeben würde. Wozu?
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  7. #7
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Daß er das Feld entry_id als ID nutzen möchte, hat er ja gar nicht geschrieben. Wäre ja auch ziemlicher Unsinn.

    Gesendet von meinem L52 mit Tapatalk
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

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

    Standard

    So hatte ich #1
    Zitat Zitat von d23 Beitrag anzeigen
    ich versuche gerade in einem Template den AUTO_INCREMENT Wert einer Tabelle abzufragen, aber irgendwie erhalte ich keinen Wert.
    und #4
    Zitat Zitat von d23 Beitrag anzeigen
    Das Formular hat auch ein verstecktes Feld entry_id. Dieses wird befüllt über ein eigenes Insert-Tag, definiert durch replaceInsertTag()...

    Und in dieser Funktion möchte ich eben prüfen, wie bei dieser Tabelle der AUTO_INCREMENT aktuell steht.
    aber verstanden. Vielleicht sagt und @d23 ja noch, was wirklich gemeint ist ;-)

    Edit: und auch es nicht als id, sondern als eigenes Feld zu verwenden (das immer identisch mit ID wäre!) erscheint mir nicht besonders sinnvoll.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  9. #9
    Contao-Nutzer
    Registriert seit
    18.02.2010.
    Beiträge
    163

    Standard

    Damit nicht noch mehr Verwirrung aufkommt:
    Nein, ich wollte nicht die ID setzen, sondern quasi den Wert, den das Feld id automatisch bekommt, in das Feld entry_id "spiegeln".

    Der Gedanke erschien mir zu der späten Stunde irgendwie sinnvoll –*heute hab ich aber kein gutes Gefühl mehr damit. Zumal man mit Primary Keys und Auto increments eher doch nicht arbeiten sollte

    Der Sinn der Übung war folgender:
    - Über ein FE-Formular soll ein Katalog befüllt werden können (ohne Registrierung / Anmeldung)
    - nach Absenden des Formulars wird mittels notification_center eine Mail abgefeuert, die einen herrlich komplexen Link beinhaltet
    - dieser Link beinhaltet unter anderem einen automatisch generierten, elends langen Token, der dafür sorgen soll, dass über den Link auch wirklich NUR dieser Eintrag nochmal aufgerufen und bearbeitet werden kann
    - der Token wird automatisch in einem hidden field gesetzt
    - in dem Link befindet sich aber auch die ID des Datensatzes
    - Problem dabei: die ID ist zum Zeitpunkt des Ausfüllens noch nicht bekannt, da diese ja erst beim Speichern generiert wird
    - Mein Gedanke war also, vor dem Absenden des Formulars: schau mal in die Tabelle, wo der Auto Increment Wert aktuell steht und nimm diesen Wert für das hidden field "entry_id"
    - damit wäre ja theoretisch entry_id = id (vom Wert her) und somit könnte ich auch diesen entry_id Wert in die URL packen, anstelle der ID

    Soweit, so kompliziert?

    Wie gesagt, diesen Gedanken habe ich verworfen. Die URL in der Mail beinhaltet jetzt nur noch den Token als Anhängsel und leitet auf eine Seite, die nur noch ein Skript enthält, dass den Token prüft, den passenden Datensatz dazu in der Tabelle sucht und dann auf die eigentliche Bearbeitungsseite weiterleitet.

  10. #10
    Contao-Nutzer
    Registriert seit
    18.02.2010.
    Beiträge
    163

    Standard

    Aus Spaß an der Freude hab ich jetzt trotzdem nochmal das versucht:

    Zitat Zitat von the_scrat Beitrag anzeigen
    So gehts:
    PHP-Code:
    $intInsertId Database::getInstance()->getNextId('tl_Tabellenname');
    echo 
    $intInsertId
    Da tut sich aber auch nichts.

  11. #11
    Contao-Nutzer Avatar von miniA4kuser
    Registriert seit
    14.11.2013.
    Beiträge
    130

    Standard

    Dann machst du was falsch. Wenn der Tabellenname stimmt, dann kommt auch ein Ergebnis...
    Tippfehler unterliegen nicht dem Copyright und können frei weitergegeben werden.

  12. #12
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von d23 Beitrag anzeigen
    Da tut sich aber auch nichts.
    Du hast aber hoffentlich tl_Tabellenname gegen deinen Tabellennamen ersetzt?!
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  13. #13
    Contao-Nutzer
    Registriert seit
    18.02.2010.
    Beiträge
    163

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Du hast aber hoffentlich tl_Tabellenname gegen deinen Tabellennamen ersetzt?!
    Sorry, Deinen Beitrag hatte ich gar nicht mehr mitbekommen.

    Äääh...ja, auch wenn's schon etwas später auf der Uhr war... den Namen hab ich natürlich ersetzt

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
  •