 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
16.06.2008, 17:14
|
#1
|
|
TP-Member
Registriert seit: Jun 2008
Ort: Halle
|
datenbank id speichern wenn eintrag erfolgt
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.
|
|
|
16.06.2008, 17:21
|
#2
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
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
|
|
|
16.06.2008, 17:25
|
#3
|
|
TP-Member
Registriert seit: Jun 2008
Ort: Halle
|
oh danke, ist ja doch so einfach
|
|
|
16.06.2008, 23:50
|
#4
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Zitat:
Zitat von Boris
SELECT LAST_INSERT_ID() FROM `deine_tabelle`
|
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
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
|
|
|
17.06.2008, 01:32
|
#5
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
mysql_insert_id macht nichts anderes als die DB abzufragen - man "spart" also nicht wirklich eine Abfrage.
Auch wichtig:
Zitat:
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
|
|
|
17.06.2008, 01:39
|
#6
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Zitat:
Zitat von Boris
mysql_insert_id macht nichts anderes als die DB abzufragen - man "spart" also nicht wirklich eine Abfrage.
|
Nö, denn dieser Wert wird mit jedem INSERT automatisch zurückgegeben. Man hat also nur die eine INSERT Anweisung. Bei dem LAST_INSERT_ID wird nach dem INSERT INTO zusätzlich noch ein SELECT an die DB geschickt.
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
|
|
|
17.06.2008, 02:01
|
#7
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
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.
__________________
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Geändert von Boris (17.06.2008 um 02:07 Uhr).
|
|
|
17.06.2008, 02:25
|
#8
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
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
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
|
|
|
17.06.2008, 03:06
|
#9
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
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
|
|
|
17.06.2008, 03:35
|
#10
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
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
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:28 Uhr.
|
 |