Davok`xarden: mysql_insert_id() mit PEAR::DB

Hi Leute,

Hab jetzt die PEAR-Klasse DB entdeckt und bin jetzt dabei mein Forum von "normalen" MySQL zu PEAR::DB umzuschreiben. Dabei benötige ich die Funktion mysql_insert_id(). Kennt jemand eine Funktion in PEAR::DB die das selbe ermöglich. Eigentlich würde es ja auch ausreichen den Letzten Insert-Query auszulesen, aber wie geht das ?

Mfg Davok`xarden

  1. Hallo.

    In den meisten Fällen dürfte die ID ja ein Int_Wert sein. Der letzte Eintrag ist folglich der, mit dem maximalen Wert in den ID-Spalte. Über eine Abfrage von MAX(ID) bekommst Du die passende ID.
    Evtl. lohnt es sich, die insert_id-Funktion selber als Funktion zu implementieren. Da ist sie etwas universeller einsetzbar.

    Grüße aus Würzburg
    Julian

    1. Hi

      Würde evtl. gehen aber dann hätte ich ja einen Query mehr = dauert länger, gibt es noch eine Lösung wo ich mir die Abfrage spare?

      Der Query würde dann so aussehen, oder:
      "SELECT felder FROM tabelle WHERE MAX(id) LIMIT 1"

      Mfg Davok`xarden

    2. Hallo Julian,

      In den meisten Fällen dürfte die ID ja ein Int_Wert sein. Der letzte Eintrag ist folglich der, mit dem maximalen Wert in den ID-Spalte.

      Nein, nicht unbedingt. Denke daran, dass es sich um eine Mehrbenutzerumgebung handelt.

      Über eine Abfrage von MAX(ID) bekommst Du die passende ID.

      Nein, nicht unbedingt. Ist außerdem überflüssig. Es gibt LAST_INSERT_ID().

      Freundliche Grüße

      Vinzenz

      1. Hallo Vinzenz.

        Nein, nicht unbedingt. Denke daran, dass es sich um eine Mehrbenutzerumgebung handelt.

        Ja, schon, aber wie hoch ist denn die Besucher-/Eintragsfrequenz bei "normalen" Seiten? Möchte behaupten, dass für über 97% derjenigen, die hier solche Fragen haben, die Lösung völlig ausreicht. Für frequentiertere Systeme müsste man sicher anders an die Sache gehen, evtl. mit Transaktionen arbeiten usw.

        Über eine Abfrage von MAX(ID) bekommst Du die passende ID.
        Nein, nicht unbedingt. Ist außerdem überflüssig.

        Aber nicht unbedingt sinnvoll, wenn man sich selber die PEAR::DB erweitern will. Denn dazu sollte die Erweiterung nach SQL-Standard erfolgen - und der kennt meines Wissens nach kein LAST_INSERT_ID

        Und mal noch eine Frage: Wie wäre Dein Lösungsansatz für das Problem?

        Grüße aus Würzburg
        Julian

        1. Hallo

          Nein, nicht unbedingt. Denke daran, dass es sich um eine Mehrbenutzerumgebung handelt.
          Ja, schon, aber wie hoch ist denn die Besucher-/Eintragsfrequenz bei "normalen" Seiten? Möchte behaupten, dass für über 97% derjenigen, die hier solche Fragen haben, die Lösung völlig ausreicht. Für frequentiertere Systeme müsste man sicher anders an die Sache gehen, evtl. mit Transaktionen arbeiten usw.

          Warum sollte man etwas definitiv falsch machen, wenn man es auch richtig machen kann?

          Aber nicht unbedingt sinnvoll, wenn man sich selber die PEAR::DB erweitern will. Denn dazu sollte die Erweiterung nach SQL-Standard erfolgen - und der kennt meines Wissens nach kein LAST_INSERT_ID

          Und mal noch eine Frage: Wie wäre Dein Lösungsansatz für das Problem?

          PEAR::DB überhaupt nicht mehr verwenden :-) Siehe dazu den Beitrag von dedlfix.

          Entweder ich nutze das Konzept eines Datenbankabstraktionslayers mit der Konsequenz, dass manches vielleicht nicht effizient, dafür aber portabel ist - oder ich nutze die Möglichkeiten des Datenbankmanagementsystems und nehme in Kauf das mein SQL-Code nicht portabel ist.

          Freundliche Grüße

          Vinzenz

  2. echo $begrüßung;

    Hab jetzt die PEAR-Klasse DB entdeckt und bin jetzt dabei mein Forum von "normalen" MySQL zu PEAR::DB umzuschreiben. Dabei benötige ich die Funktion mysql_insert_id(). Kennt jemand eine Funktion in PEAR::DB die das selbe ermöglich.

    Diese Funktion ist in PEAR::DB nicht enthalten. Sie ist auch nicht datenbankübergreifend verfügbar. Andere Datenbanken verwenden keinen Auto-Increment-Wert in einer Spalte sondern Sequenzen. PEAR::DB setzt auf Sequenzen und simuliert diese für Systeme wie MySQL: http://pear.php.net/manual/en/package.database.db.intro-sequences.php.

    PEAR::DB wurde neulich durch PEAR::MDB2 abgelöst. Dort gibt es beide Wege: http://pear.php.net/manual/en/package.database.mdb2.intro-sequences.php

    Wenn dir PHP5 zur Verfügung steht könnte dich auch PDO interessieren.

    echo "$verabschiedung $name";