Last_Insert_Id
Jürgen
- php
1 Vinzenz Mai0 jürgen
0 globe
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
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
Danke,
jetzt hab ich es verstanden und funktioniert auch so wie ich es wollte.
Jürgen
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...