Bei MAX(ID) immer vorletzte ID

xthetronx

Erfahrenes Mitglied
Hallo zusammen,

ich habe einen Eintrag in die DB gemacht und lese sofort die MAX(ID) aus.

Nun liest er mir immer die vorletzte ID aus.
Also anstatt 15 die 14.
Sprich der frisch eingetragene Datensatz hat die 15.

Ich vermute jetzt mal, dass es daran liegt, dass bei "SELECT" nicht auf den aktuellsten Datensatz zurück gegriffen wird.
Die ID ist auto_increment.

PHP:
mysql_select_db("ticket");

$anfrage = "SELECT * FROM tabkunde WHERE Name = '$Nachname'";
$ergebnis = mysql_query($anfrage);
$anz = mysql_num_rows($ergebnis);
$spaltenanzahl = mysql_num_fields($ergebnis);
$zeile = mysql_fetch_row($ergebnis);

	$anfrage = "INSERT INTO tabkunde VALUES ('";
	$anfrage.='';
	$anfrage.="', '";
	$anfrage.=$Nachname;
	$anfrage.="')";	
/* Hier kommt nach dem neuen Eintrag die Abfrage für MAX(ID) */
	$sql = mysql_query("SELECT MAX(ID_Kunde) AS maxID FROM tabkunde");
	$tmp_id = mysql_fetch_array($sql); 
	$max_id = $tmp_id[maxID];

	print($max_id);

Vielen Dank für eure Hilfe

Gruß

Torsten
 
Hallo,

versuche es mal so

Last_insert_id()

PHP:
$sql = mysql_query("SELECT LAST_INSERT_ID(ID_Kunde) AS maxID FROM tabkunde");
greetz
Ultrasonic

Offtropic
hmm warst wohl schneller
 
Zuletzt bearbeitet:
Danke euch beiden erstmal für die super-schnelle Antwort, haut aber beides (noch) nicht hin.

bei LAST_INSERT_ID() tut sich gar nichts

und bei

$maxID = mysql_insert_id();
print($maxID);

bekomme ich nur '0' angezeigt.

Laut php.net

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.

Ich habe aber ein AUTO_INCREMENT in meiner Tabelle

Feld | Typ |Attribute | Null | Standard | Extra
ID_Kunde | smallint(5) | Nein | | | auto_increment

Habt ihr da vielleicht noch eine Idee zu?

Torsten
 
Währe toll gewesen wenn du dein insert auch ausführen würdes :-)

PHP:
 $anfrage = "INSERT INTO tabkunde VALUES ('";
 $anfrage.='';
 $anfrage.="', '";
 $anfrage.=$Nachname;
 $anfrage.="')";    
 
 $sql = mysql_query($anfrage);

 $maxID = mysql_insert_id();
 print($maxID);
 
Also vielleicht bin ich auch zu blöd oder es ist schon zu spät, aber dieses mysql_insert_id() nervt mich langsam:rolleyes:

Wenn ich Deinen Code
PHP:
$anfrage = "INSERT INTO tabkunde VALUES ('";
 $anfrage.='';
 $anfrage.="', '";
 $anfrage.=$Nachname;
 $anfrage.="')";    
 
 $sql = mysql_query($anfrage);

 $maxID = mysql_insert_id();
 print($maxID);

eingebe, werden mir 2 Datensätze erzeugt.
Ich denke dass liegt daran, dass in $anfrage natürlich der ganze INSERT Befehl drin steht.
Zudem bekomme ich dann auch wieder die vorletzte ID angezeigt.

Ich poste jetzt sicherheitshalber nochmal meinen bisherigen Code. Vielleicht ist da ja noch ein Fehler drin.
PHP:
$db = mysql_connect("localhost","root","passwort");
mysql_select_db("ticket");

$anfrage = "SELECT * FROM tabkunde WHERE Name = '$Nachname'";
$ergebnis = mysql_query($anfrage);
$anz = mysql_num_rows($ergebnis);
$spaltenanzahl = mysql_num_fields($ergebnis);
$zeile = mysql_fetch_row($ergebnis);

if ($anz > 0) {
	print("Kunde schon vorhanden");
}
else {
	$anfrage = "INSERT INTO tabkunde VALUES ('";
	$anfrage.='';
	$anfrage.="', '";
	$anfrage.=$Ansprechpartner;
	$anfrage.="', '";
	$anfrage.=$Anrede;
	$anfrage.="', '";
	$anfrage.=$Nachname;
	$anfrage.="', '";
	$anfrage.=$Vorname;
	$anfrage.="', '";
	$anfrage.=$Telefon;
	$anfrage.="', '";
	$anfrage.=$Email;
	$anfrage.="', '";
	$anfrage.=$AnmerkungKunde;
	$anfrage.="')";	
	
    $sql = mysql_query($anfrage);
	$maxID = mysql_insert_id();
	print($maxID);
Nochmal danke für eure Bemühungen.

Torsten
 
Hab den Fehler gefunden.

Ich Trottel hatte noch ganz unten, am Ende der Seite ein query stehen, daher der doppelte Eintrag den ich hinterher hatte. :rolleyes:
 
Zurück