mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 03:12 Benutzername: Passwort: Auto-Login

Thema: [PHP] Problem mit mysql_insert_id() in einer Schleife vom 16.11.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [PHP] Problem mit mysql_insert_id() in einer Schleife
Autor Nachricht
kleinstadtmc
Threadersteller

Dabei seit: 28.05.2002
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Fr 16.11.2007 15:51
Titel

[PHP] Problem mit mysql_insert_id() in einer Schleife

Antworten mit Zitat Zum Seitenanfang

ich habe ein problem und komm nicht auf die lösung

folgende situation:
ich habe ein array das ich in einer schleife auslesen will
die ergebnisse will ich in eine datebank schreiben
danach hole ich mir mit mysql_insert_id() die id der letzten eintragung
diese id übergebe ich an eine funktion in der ebenfalls eine mysql aktion ausführt

das problem ist wenn nun die schleife läuft bekomme ich im zweiten durchlauf
nicht die id der ersten mysql aktion sondern die aus der funktion
normal darf das ja nicht sein oder?

zur veranschaulichung hier ein beispielcode:
Code:

for($x=0; $x<count($array); $x++){

     $sql="INSERT INTO tabelle (daten1,daten2) VALUES ($array[$x]['daten1'],$array[$x]['daten2'])";
     $result=mysql_query($sql);
     $id = mysql_insert_id();

     funktion_mach_was($id); // in dieser funktion wird ebenfalls eine mysql aktion durchgeführt - im nächsten durchgang wird dann bei dem aufruf mysql_insert_id() die id aus dieser aktion ausgegeben und nicht die aus der obigen $sql anweisung

}
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Fr 16.11.2007 16:01
Titel

Antworten mit Zitat Zum Seitenanfang

haste das skript schonmal mit nem debugger schritt für schritt abgeklappert?

ich denke das düfte dir zeigen wo das problem liegt.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Fr 16.11.2007 16:12
Titel

Antworten mit Zitat Zum Seitenanfang

http://de.php.net/mysql_insert_id :
Zitat:

mysql_insert_id

(PHP 4, PHP 5, PECL mysql:1.0)

mysql_insert_id — Liefert die ID einer vorherigen INSERT-Operation
Beschreibung
int mysql_insert_id ( [resource $Verbindungs-Kennung ] )

mysql_insert_id() liefert die ID, die bei der letzten INSERT-Operation für ein Feld vom Typ AUTO_INCREMENT vergeben wurde. Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen.

mysql_insert_id() liefert 0, wenn die vorhergehende Abfrage keinen AUTO_INCREMENT Wert erzeugt hat. Falls Sie den Wert zur späteren Verwendung speichern möchten, stellen Sie sicher, dass Sie mysql_insert_id() direkt nach der Abfrage aufrufen, die einen Wert erzeugt hat.

Anmerkung: Der Wert der MySQL SQL Funktion LAST_INSERT_ID() liefert immer den zuletzt erzeugten AUTO_INCREMENT Wert. Dieser wird zwischen Abfragen nicht zurückgesetzt.

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.



sind die hier beschriebenen möglichen fehler auszuschließen??

forza
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
kleinstadtmc
Threadersteller

Dabei seit: 28.05.2002
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Sa 17.11.2007 08:30
Titel

Antworten mit Zitat Zum Seitenanfang

dat dingens von php.net kenn ich und hab ich schon durchgelesen

Zitat:
mysql_insert_id — Liefert die ID einer vorherigen INSERT-Operation


in der funktion die später aufgerufen wird kommen aber update-operationen und trotzdem wird diese id übernommen

Zitat:
mysql_insert_id() liefert die ID, die bei der letzten INSERT-Operation für ein Feld vom Typ AUTO_INCREMENT vergeben wurde. Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen.


die verbindung steht, und das feld ist auch auto increment

Zitat:

mysql_insert_id() liefert 0, wenn die vorhergehende Abfrage keinen AUTO_INCREMENT Wert erzeugt hat. Falls Sie den Wert zur späteren Verwendung speichern möchten, stellen Sie sicher, dass Sie mysql_insert_id() direkt nach der Abfrage aufrufen, die einen Wert erzeugt hat.


wie man sieht wird mysql_insert_id() ja in meinem code direkt nach dem query abgefragt - aber beim zweiten durchlauf nimmt es die id von der vorhergehenden funktion_mach_was() und nicht die von der aktuellen query...
was ja eigentlich nicht sein dürfte da ja das darüber stehende query immer die letzte insert aktion sein müsste...

ich kann mir höchstens vorstellen das php da schneller ist als mysql und die mysql insert aktion noch nicht fertig ist und deswegen die id von der mysql aktion in der mach_was() funktion genommen wird * Keine Ahnung... *
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Mo 19.11.2007 12:12
Titel

Antworten mit Zitat Zum Seitenanfang

tip: nutze mysql_error in der schleife *zwinker*
  View user's profile Private Nachricht senden
kleinstadtmc
Threadersteller

Dabei seit: 28.05.2002
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 19.11.2007 18:12
Titel

Antworten mit Zitat Zum Seitenanfang

üsch habs...

das problem war das ich zwei verschieden mysql connections auf habe
die in der mach_was funktion ist quasi eine andere verbindung wie die erste

jetzt hab ich in die my_sql_insert() die verbindungskennung eingetragen...
jetzt scheint es zu funktionieren...

trotzdem danke...
  View user's profile Private Nachricht senden
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Mo 19.11.2007 19:11
Titel

Antworten mit Zitat Zum Seitenanfang

pixelpapst303 hat geschrieben:
http://de.php.net/mysql_insert_id :
Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen.


*Huch*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 19.11.2007 19:22
Titel

Antworten mit Zitat Zum Seitenanfang

pixelpapst303 hat geschrieben:
pixelpapst303 hat geschrieben:
http://de.php.net/mysql_insert_id :
Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen.


*Huch*


? Ist doch korrekt so, und ein Blick in die Doku hätte das mit Sicherheit auch verraten. *zwinker*

edit: *ha ha* sorry, ich seh schon, genau dass hast du gerade zitiert.


Zuletzt bearbeitet von m am Mo 19.11.2007 19:22, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen [php/mysql] problem mit insert
[PHP&MySQL] Insert in 2 Tabellen
MySQL/PHP - If-Abfrage in einer while-Schleife
Textdatei zeilenweise in schleife in MySQL-Tabelle einfügen?
Problem mit Rollover in Schleife
[Flash] Problem mit attachMovie-Schleife
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.