Jürgen: Last_Insert_Id

wo liegt der fehler?
ich will die letzte eingesetzte (auto increment) id

code:
<?php
//datenbankanbindung
include("../mysql.php");

//SELECT LAST_INSERT_ID();
//letzte id abfragen zu modelle
        if (!$erg = mysql_query("SELECT LAST_INSERT_ID() FROM modelle "))
        {
                mysql_log(__FILE__,__LINE__);
        }

while ($zeile = mysql_fetch_array($erg))
        {
         echo $zeile[0];
        }  //ende while
        mysql_free_result($erg);

?>
als ergebinis kommt: 000000000000000000000000000
wieso null? und warum so viele?
eigentlich müüste 97 das ergebnis sein.
danke für eure hilfe
Jürgen

  1. Hallo,

    ich will die letzte eingesetzte (auto increment) id

    Warum? Wozu?

    <?php
    //datenbankanbindung
    include("../mysql.php");

    aha, hier wird die Verbindung geöffnet. D.h. in dieser Verbindung wurde noch kein neuer Datensatz erstellt, der einen AUTO_INCREMENT-Wert erzeugt hätte. Daher ist der für diese Verbindung gespeicherte Wert, den SELECT LAST_INSERT_ID() zurückliefert, der Wert 0.

    //SELECT LAST_INSERT_ID();
    //letzte id abfragen zu modelle
            if (!$erg = mysql_query("SELECT LAST_INSERT_ID() FROM modelle "))

    Du wirst hier ein Opfer der Schlamperei von MySQL. Statt Dir einen Syntax-Fehler um die Ohren zu hauen, weil Du eine falsche Syntax verwendet, erzeugt MySQL einen CROSS JOIN des Wertes, den LAST_INSERT_ID() zurückliefert mit allen Datensätzen, die die Tabelle modelle enthält.

    {
                    mysql_log(__FILE__,__LINE__);
            }

    while ($zeile = mysql_fetch_array($erg))
            {
             echo $zeile[0];

    Du hast soviel Datensätze mit dem Inhalt 0 wie die Tabelle modelle Datensätze hat. Du gibst eine 0 nach der anderen aus.

    }  //ende while
            mysql_free_result($erg);

    ?>
    als ergebinis kommt: 000000000000000000000000000

    soviel Nullen wie Datensätze in modelle.

    wieso null? und warum so viele?
    eigentlich müüste 97 das ergebnis sein.

    Nein, soviele Nullen wie Datensätze in modelle.

    Du kannst mit LAST_INSERT_ID() nicht ermitteln, welcher Autoincrement-Wert für eine bestimmte Tabelle irgendwann einmal vergeben wurde. Du kannst damit den Autoincrement-Wert ermitteln, der zuletzt in der aktuellen Verbindung erzeugt wurde (egal in welcher Tabelle!). Wurde noch keiner erzeugt, so erhältst Du eben 0.

    Was ist Dein eigentliches Ziel?

    Freundliche Grüße

    Vinzenz

    1. Danke,
      jetzt hab ich es verstanden und funktioniert auch so wie ich es wollte.

      Jürgen

  2. n'abend,

    if (!$erg = mysql_query("SELECT LAST_INSERT_ID() FROM modelle "))

    LAST_INSERT_ID() arbeitet auf der Verbindung, nicht auf einer Tabelle. Vermutlich ist das FROM modelle an dieser Stelle nicht nur unnötig, sondern falsch.

    Die Doku zu LAST_INSERT_ID() hast du dir angeschaut?

    Die PHP-Funktion mysql_insert_id() kennst du?

    weiterhin schönen abend...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|