anzeige
MySql - Primarykey stimmt nach INSERT nicht
Seite: 1 2
| Autor | Beitrag |
|
fizzwars 10.03.10 - 17:55:43 Uhr |
Hi Leute, ich stehe vor einem verzwickten Problem. Ich habe auf meine HP die Möglichkeit Bilder hochzuladen. Man wählt die Bilder aus, schreibt einen Titel und eine Beschreibung hinzu und klickt dann auf Hochladen. Es wird für das Bild ein neuer Eintrag in der Tabelle "bild" eingefügt (In dieser werden Bildinformationen zu hochgeladenen Bildern abgespeichert (Titel, Beschreibung)). Dann wird das hochzuladene Bild in den Bilder-Ordner verschoben. Dabei wird per mysql_insert_id() die ID des zuvor ausgeführten INSERT-Statements geholt (welche das Bild eingefügt hatte) und als Bildname verwendet. Dies klappt auch wunderbar. Der Bildname erhält die ermittelte ID und das Bild wird angelegt. Jetzt kommt jedoch das Problem: Die ermittelte ID unterscheidet sich von der ID, welche in der Tabelle "bild" angelegt wird. D.h. wenn ich ein Bild hochlade, so wird das Bild zum Beispiel unter der ermittelten ID 75 gespeichert, der dazugehörende Bildeintrag in der Tabelle hat jedoch die ID 4. Es hilft nichts die Tabelle oder sogar die Datenbank zu löschen und das Ganze neu aufzusetzen. Das Problem herrscht immer noch. PS: Wenn ich Bilder in der Tabelle hinzufüge, und dann die Tabelle leere, sodass keine Einträge mehr vorhanden sind, so tritt das Problem immer noch auf. Wenn ich nämlich dann ein Bild einfüge, so gibt mysql_insert_id() die ID zurück welche zuletzt in der gefüllten Tabelle als nächstes dran wäre. Der dazugehörende Tabelleneintrag wird jedoch von 1 beginnend in die Tabelle eingetragen. Wo liegt das Problem? Wird die PK-ID irgendwo gespeichert? Nur, wenn ich bei phpmyadmin die Tabelle auswähle und auf Operationen klicke und mir den AUTO-INCREMENT Wert anschaue, so ist dieser korrekt zu dem was in der Tabelle eingetragen wird, jedoch nicht was mysql_insert_id() wiedergibt. Also ich denke es kann nur an mysql_insert_id() liegen, das dort irgendetwas nicht passt, aber was - ich weis es nicht. Ich hoffe ihr könnt mir helfen - bin schon total verzweifelt ![]() Braucht ihr weitere Infos, zB. zur Datenbank oder so, sagt Bescheid. MfG Toni. |
|
Achtzig 10.03.10 - 19:35:15 Uhr |
Ein Auszug vom Quelltext wäre sehr hilfreich. Ich weiß auch nicht, wie Du die Tabelle geleert hast aber wenn Du alle Datensätze markierst und sie löschst, wird der nächste Index nicht geändert. Nur wenn Du TRUNCATE TABLE xxx benutzt (Leeren bei PMA), wird der aktuelle Index wieder zurück gesetzt. Was steht denn bei Optionen (PMA) unter AUTO_INCREMENT für ein Wert? |
|
fizzwars 10.03.10 - 20:15:46 Uhr |
Also im Quelltext leere ich die Tabelle nicht. Ich hatte Sie einfach aus phpmyadmin heraus geleert - mittels TRUNCATE TABLE bild. Der Index welcher im AUTO-INCREMENT Feld steht, ist nach dem Leeren 1. Füge ich nun ein neues Bild hinzu, so gibt mysql_insert_id() einen anderen Wert aus (einen größeren). |
|
Achtzig 10.03.10 - 20:24:02 Uhr |
Hast Du mal einen kleinen Auszug aus dem Quelltext und kann es sein, daß Du eigentlich last_insert_id benötigst? Nachtrag: Vergiss Letzteres aber der Auszug wäre wirklich ganz brauchbar. |
|
fizzwars 10.03.10 - 20:30:33 Uhr |
Dies ist der Codeausschnitt, welcher das Bild in die Datenbank einfügt.
last_insert_id sagt mir nichts. Ich habe auch bei php.net nichts gefunden außer db2_last_insert_id, meinst du das? |
|
Achtzig 10.03.10 - 20:43:52 Uhr |
Ist biIDspID der Primärindex? Wenn ja, darf er nicht mit eingefügt werden, da der Index ja automatisch erzeugt wird. Das mit dem last_insert_id war ein Versehen
|
|
fizzwars 10.03.10 - 20:47:29 Uhr |
Achso, ich hätte eine Beschreibung mit einbringen können^^ Also biIDspID ist ein Fremdschlüssel. Den PK füge ich nicht mit ein... |
|
Achtzig 10.03.10 - 21:18:25 Uhr |
Hmm, seltsam. Ich kann dann spontan keinen Fehler entdecken. Werde das nachher mal direkt selber hier ausprobieren. |
|
fizzwars 10.03.10 - 21:30:17 Uhr |
Ich habe keine Ahnung woran es liegen mag, ABER anscheinend taucht dieses Problem bei allen mysql_insert_id() Aufrufen auf. Deshalb gehe ich jetzt den etwas anderen Weg und hole mir die eingefügte ID über ein SELECT-Statement. Falls du Achtzig, oder irgend jemand anderes noch eine Idee habt wie man dies ändern kann, bzw. woran es liegen kann, sagt bitte Bescheid. MfG Toni. |
|
fizzwars 10.03.10 - 21:38:43 Uhr |
AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH!!! Nein!!! Erschießt mich bitte!!! Ich habe den Fehler gefunden...und ich bin so ein Trottel....... Ich benutze für alle Statements eine eigene Datenbankklasse. Diese regelt den Zugriff auf die Datenbank und kann die Abfragen , Inserts usw. auch in einer Logtabelle speichern. Wenn nun das loggen der Statements aktiviert ist, wird nach dem Aufruf des Statements ein INSERT-Statment ausgeführt und der Logeintrag erstellt. Frage ich nun danach mysql_insert_id() nach der letzten hinzugefügten ID, so kommt die ID des Logeintrages. Bitte erschießt mich...man das kann doch nicht wahr sein. So ein blöder Fehler. Die beste Lösung eines Problemes ist wirklich, mit anderen zu Reden. Denn dann kommt man manchmal von alleine auf die Lösung ![]() Problem ist gelöst. Danke Achtzig das du versucht hast das Problem zu lösen - aber da hättest du nichts lösen können, der Fehler lag bei mir... MfG Toni. Und eine gute Nacht. |
- Obige Beiträge stellen keine Äußerung oder Meinung von Pytal oder dessen Betreiber dar -



