Last_id übermittelt negativen wert

Godstyle

Erfahrenes Mitglied
Hallo liebe Gemeinde,


ich möchte in meinem Anmeldeformular, das Informationen in verschiedenen Tabellen gespeichert werden, dazu lese ich bei der abfrage die Last_id aus und möchte sie in einer anderen Tabelle als User ID nutzen, die last_Id ermittel ich in folgendem Code:

PHP:
$sql = "INSERT 
                               INTO 
                                  `ow_login`     
                                   (`username`, `email`, `passwort`, `confirmcode`, `ip`, `sicherheit`, `antwort`) 
                                    
                                    VALUES 
                                   
                                   ('$username', '$email', '$passwort', '$confirm_code', '$user_ip', '$sicherheitsfrage', '$antwort')";

                                    mysql_query($sql) or die(mysql_error());						
									$last_id = mysql_insert_id ();
									


$pro_data = "INSERT 
								INTO 
									`ow_user_data` 	
									(`userid`, `vorname`, `nachname`, `geb_tag`, `geb_mon`, `geb_jahr`, `sex`) 
									
									VALUES 
									
									('$last_id', '$vorname', '$nachname', '$geb_tag', '$geb_mon', '$geb_jahr', '$sex')";

                                    mysql_query($pro_data) or die(mysql_error());


Die tabbeln Struktuer sieht ein BIG INT vor und erhält eine auto_increment Wert ab 10000000000000000000

Soweit funktioniert es auch.

Dies müsste meines Wissens nach nun auch in $last_id gespeichert sein, jedoch speichert er mir an anderer Stelle den Wert: -1981284352 bei weiteren einträgen sieht es wie folgt aus:
-1981284351
-1981284350
-1981284349

Er erkennt jedenfalls das die Zahl steigen muss, doch wie bekomme ich beide auf den selben Wert?

Das 2te Feld ist im Übrigen als varchar mit 30 Zeichen.

lg
 
So, eine Prüfung hat ergeben das der Fehler im auslesen liegen muss, also in folgender Zeile:

$last_id = mysql_insert_id ();

ist es Möglich nicht die ID auszulesen sondern den Exakten Wert der zuletzt eingetragen wurde?

Mit einer 2ten ABfrage wäre es sehr umständlich da das script direkt hintereinander weg speichern soll.

lg
 
Ist dieses ID-Fel in ow_login auch der Primary Key?

Nachtrag: Aus der PHP-Doku zu mysql_insert_id()

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.
 
Hey danke,

Ja das Feld ist in OW_login als Primary deklariert.

mit Last_insert_id() das hatte ich vergessen das es bei BIG INT genutzt werden muss, dazu danke.

Dabei entsteht jedoch folgender fehler:

Fatal error: Call to undefined function LAST_INSERT_ID() in C:\xampp\htdocs\oneworld\includes\register.inc.php on line 132

Wie muss ich diese denn nun deklarieren in meinem Scipt?
 
In einer Abfrage, wie es da steht.

Am besten sogar alles in einem Wisch, damit kein anderer dazwischenfunkt
http://dev.mysql.com/doc/refman/5.1/de/example-foreign-keys.html

SQL:
INSERT INTO 
	`ow_login`     
	(`username`, `email`, `passwort`, `confirmcode`, `ip`, `sicherheit`, `antwort`) 
VALUES
	('{$username}', '{$email}', '{$passwort}', '{$confirm_code}', '{$user_ip}', '{$sicherheitsfrage}', '{$antwort'});

SELECT @Last := LAST_INSERT_ID();

INSERT INTO 
	`ow_user_data`     
	(`userid`, `vorname`, `nachname`, `geb_tag`, `geb_mon`, `geb_jahr`, `sex`) 
VALUES 
	(@Last, '{$vorname}', '{$nachname}', '{$geb_tag}', '{$geb_mon}', '{$geb_jahr}', '{$sex}');
 
Zuletzt bearbeitet von einem Moderator:
Also, ich bin ganz ehrlich, ich habe deinen Code erstmal übernommen und ende Zeile 5 bein dir '{$antwort'}) das ' geändert, er sagt mir denoch fehle rim code an in Zeile 7, ich habe auf diese art noch keine Abfrage erstellt, daher bin ich dort recht unwissend, das ich mit @Last werte übergeben kann war mir ganz neu.

Könntest du vlt noch einmal drüber sehen und es anpassen oder abgesehen von dem Link grade kurz eine erklärung dazu geben wie ich es nutze da es mit meiner abfrage nicht zusammen Passt.

lg und schonmal danke für das bisherige
 
Es ist schwer sich ein Code anzusehen den man nicht sieht.
Des weiteren: Fehlersuche ist nicht schwer. Hier gibts eine Anleitung: PHP MySQL Debug Queries
Wenns nachher immer noch nicht geht, poste mal das generierte SQL sowie die genau Fehlermeldung das du beim Fehlersuchen dir bereits ausgeben lassen hast (Ende von Scrhitt 2).

Nachtrag. Ein Mulit-Qiery musst du mit mysqli, nicht mi mysql abfeuern
PHP:
//$db als MySQLi-Objekt anlegen

include('connectMysqli.php');

//SQL definieren
$sql = <<<SQL
INSERT INTO test(`name`)
VALUES('def');

SELECT @last := LAST_INSERT_ID();

INSERT INTO test15(bigi)
VALUES(@last);
SQL;

//Absenden
$db->multi_query($sql);
$db->close();
 
Zurück