Du musst halt mit einer Query die zuletzt angelegte ID abfragen, z.B.
SELECT LAST_INSERT_ID() FROM `deine_tabelle`
Hallo ihr.
Meine frage diesmal:
Also der user füllt ein formular aus was dann an die datenabnk übertragen wird.
id_anz ist der primär key,
bei dem eintrag wird automatisch eine neue id_anz angelegt also, ich mein die zahl die ganz vorn steht.
wenn der eintrag erfolgt ist soll die neue id_anz dann in einer variable gespeichert werden, damit ich danach damit weiter arbeiten kann.
Aber wie funkioniert das?
ich hoffe ich hab das etwas verständlich erklärt.
Du musst halt mit einer Query die zuletzt angelegte ID abfragen, z.B.
SELECT LAST_INSERT_ID() FROM `deine_tabelle`
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
oh danke, ist ja doch so einfach
Alternativ dazu geht auch mysql_insert_id. Auf diese Weise ist keine zusätzliche Abfrage der DB nötig um an die zuletzt vergebene ID zu kommen.
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
mysql_insert_id macht nichts anderes als die DB abzufragen - man "spart" also nicht wirklich eine Abfrage.
Auch wichtig:
Warnung
mysql_insert_id() konvertiert den Typ der Rückgabe der nativen MySQL C API Funktion mysql_insert_id() in den Typ long (als int in PHP bezeichnet). Falls Ihre AUTO_INCREMENT Spalte vom Typ BIGINT ist, ist der Wert den mysql_insert_id() liefert, nicht korrekt. Verwenden Sie in diesem Fall stattdessen die MySQL interne SQL Funktion LAST_INSERT_ID() in einer SQL-Abfrage.
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Und das steht wo?
Versteh mich nicht falsch, aber wo wird denn der Wert hin zurückgegeben, bzw. gespeichert? Ich würd es dann auch schon genauer wissen
So oder so bleibt die Problematik, falls man die IDs als BIGINT definiert hat - insofern ist die PHP Funktion mysql_insert_id zwar eine Möglichkeit, aber nicht die beste, um die neuste ID zu ermitteln.
Geändert von Boris (17.06.2008 um 02:07 Uhr)
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Hi Boris,
naja, als Programmierer sollte man schon wissen ob man Bigint benutzt hat oder nicht. Ich persönlich habe noch nie Bigint als Feldtyp benutzt und habe auch noch nie gesehen das es jemand anderes für seinen auto_inc genommen hat. Wieso auch, wenn Int unsigned bis 4294967295 geht, was wohl mehr als ausreichend sein sollte und dabei nur halb so viel Platz (4 Byte pro Zeile) belegt wie Bigint (8 Byte pro Zeile).
Zu deiner Frage wo dieser Wert gespeichert wird. Keine Ahnung, in irgend einem internen Speicher eben. Das es aber so ist kannst Du sehr leicht auf deinem Xampp testen. Erstelle eine Testtabelle, ein kleines Script dazu das einen Dummyeintrag in die Tabelle macht. Hier kommt der Trick: zwischen dem INSERT INTO im Script und dem echo mysql_insert_id(); schickst Du das Script 20 Sekunden schlafen (sleep). In diesen 20 Sekunden beendest Du im Dienstemanager den MySQL Dienst, so das überhaupt kein SQL Server erreichbar ist. Du wirst sehen, wenn das Script nach 20 Sekunden aufwacht wird es die zuletzt eingefügte ID ausgeben. Das könnte es wohl nicht, wenn es erst nochmal die DB kontaktieren müsste um die ID abzufragen.![]()
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Ok, danke für die Informationen
Einen kleinen Nachteil hat es dennoch - man kann nicht (wie bei einem SELECT) eine bestimmte Tabelle explizit angeben.![]()
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Die zuletzt eingefügte ID bezieht sich immer auf die Verbindung, genau wie viele andere Statements auch. Deswegen sollte man auch immer die Verbindungskennung mit angeben, sonst wird automatisch die zuletzt offene Verbindung benutzt. Wenn man verschiedene Verbindungskennungen hat, kann man damit natürlich auch separate die zuletzt eingefügten IDs ermitteln.
Wie auch immer, letztendlich ist das in der Praxis aber eher eine Glaubensfrage, ob man die ID auf dem einen oder anderen Weg ermittelt. Deswegen nannte ich es oben auch "Alternative" und nicht "nur so ist's richtig"
Denn auch die LAST_INSERT_ID() Methode hat Nachteile. So wird hier wirklich immer die zuletzt eingefügte ID zurückgeliefert. Was aber, wenn man an einer großen Seite mehrere Redakteure hat, die gleichzeitig Datensätze hinzufügen? Unter Umständen überschneiden sich Einträge und zwischen dem INSERT Statement und dem LAST_INSERT_ID Statement wurde ein weiterer Datensatz in die DB geschrieben - in dem Fall bekäme man die falsche ID zurückgeliefert. Unwahrscheinlich, aber möglich! Das Problem würde bei der mysql_insert_id Methode nicht auftreten, weil hier die ID sofort mit dem Insert zurückgeliefert wird und diese über die eindeutige Verbindungskennung abfragbar ist.
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)