Mik3e
Erfahrenes Mitglied
Hallo zusammen!
Ich arbeite klassisch mit MySQL & PHP, basierend auf PEAR.
Dabei bin ich auf folgendes "Problem" gestoßen:
Ich schreibe Datensätze in eine Tabelle, die mit einem künstlichen und automatischen Primary Key versehen ist (BIGINT[20] | AUTO INCREMENT).
Über ein simples Insert Statement wird in dieser Tabelle ein Wert hinzugefügt. Nun hätte ich gern, dass der Wert des Primary Key des neuen Datensatzes zurückgeliefert wird, da ich in der selben Methode (zweites SQL Statement) diesen Primary Key als Foreign Key in eine Assoziative Tabelle schreiben muss.
Ich weiß, es gibt natürlich die Möglichkeit, nach dem Insert mit neuem SELECT Statement und MAX() den höchsten Key auszulesen. Das ganze ist aber nicht sonderlich sicher, da die Datensätze zwischen Anlegen und Auslesen des Keys nicht gelockt werden. Theoretisch könnte also ein zweiter Prozess genau zwischen diese beiden Statements greifen, wodurch der ausgelesene Primary Key natürlich nicht mehr stimmt.
Gibt es bei MySQL oder PEAR irgendwie eine Möglichkeit, den Primärschlüssel automatisch und in einem Schritt zurückzugeben (eine Art RETURN Wert vom Insert Statement)?
Ich hoffe ich habe mein Anliegen verständlich erklärt und Ihr könnt mir weiterhelfen...
Möglicherweise gibts auch eine andere Workaround Lösung. Vom künstlichen Primärschlüssel komme ich nicht weg....
Danke & LG
Mike
Ich arbeite klassisch mit MySQL & PHP, basierend auf PEAR.
Dabei bin ich auf folgendes "Problem" gestoßen:
Ich schreibe Datensätze in eine Tabelle, die mit einem künstlichen und automatischen Primary Key versehen ist (BIGINT[20] | AUTO INCREMENT).
Über ein simples Insert Statement wird in dieser Tabelle ein Wert hinzugefügt. Nun hätte ich gern, dass der Wert des Primary Key des neuen Datensatzes zurückgeliefert wird, da ich in der selben Methode (zweites SQL Statement) diesen Primary Key als Foreign Key in eine Assoziative Tabelle schreiben muss.
Ich weiß, es gibt natürlich die Möglichkeit, nach dem Insert mit neuem SELECT Statement und MAX() den höchsten Key auszulesen. Das ganze ist aber nicht sonderlich sicher, da die Datensätze zwischen Anlegen und Auslesen des Keys nicht gelockt werden. Theoretisch könnte also ein zweiter Prozess genau zwischen diese beiden Statements greifen, wodurch der ausgelesene Primary Key natürlich nicht mehr stimmt.
Gibt es bei MySQL oder PEAR irgendwie eine Möglichkeit, den Primärschlüssel automatisch und in einem Schritt zurückzugeben (eine Art RETURN Wert vom Insert Statement)?
PHP:
function CREATE_Rabattstufe($testwert)
{
$sql = ' INSERT INTO '
. ' `tbl_test` '
. ' (`test_spalte`) '
. ' VALUES '
. ' (\''.$testwert.'\') ';
$result=$this->_db->query($sql);
-------------------------------------------------------------------------------------
HIER RÜCKGABE DES ANGELEGTEN PRIMÄRSCHLÜSSELS !
In Pseudocode:
$this->_db->GET_CREATED_PRIMARYKEY($result);
-------------------------------------------------------------------------------------
if (mysql_errno()==0) {
$errormsg='';
} else {
$errormsg=mysql_errno).'/'.mysql_error();
}
}
Ich hoffe ich habe mein Anliegen verständlich erklärt und Ihr könnt mir weiterhelfen...
Möglicherweise gibts auch eine andere Workaround Lösung. Vom künstlichen Primärschlüssel komme ich nicht weg....
Danke & LG
Mike