Moin allerseits,
ich verwende in einem bestehenden Framework das Plugin ezSQL, um Datenbankoperationen in MySQL durch zu führen.
Wenn ich nun mit INSERT einen Datensatz in eine Tabelle schreibe, möchte ich die ID des soeben geschriebenen Eintrags haben, um diesen Eintrag anschließend an zu zeigen. mysql_insert_id() hat irgendwie nicht funktioniert. Ich weiß bei ezSQL auch nicht, wie ich die Resource an mysql_insert_id() übergebe.
Momentan habe ich es folgendermaßen gelöst:
// Anlegen eines neuen Datensatzes
$dbfeedback->query("INSERT INTO ticket SET (datum=NOW(),user='".$user."',email='".check($_POST['email'])."');");
// ID des gerade angelegten Datensatzes auslesen
$lastid = $dbfeedback->get_results("SELECT LAST_INSERT_ID();");
foreach ($lastid[0] as $val)
{
$id = $val;
break 1;
}
Das komplizierte Konstrukt mit foreach habe ich , weil ich in $lastid ein Array bekomme, welches ein Objekt enthält, in welchem dann die Eigenschaft LAST_INSERT_ID() die ID hat. Diese Eigenschaft heißt aber LAST_INSERT_ID() und ich weiß nicht, wie ich mit Objektnotation darauf zugreifen soll. Wenn ich es mit $lastid[0]->LAST_INSERT_ID()
versuche, denkt PHP, dass ich eine Methode aufrufe und gibt eine Fehlermeldung aus.
Mein eigentliche Frage ist: Was passiert, wenn zwischen dem Anlagen des Datensatzes und der Abfrage mit SELECT LAST_INSERT_ID() ein weiterer Datensatz (z.B. von einem anderen Client aus) angelegt worden ist? Wie kann ich garantieren, dass ich die ID des von mir gerade angelegten Datensatzes bekomme? Und wird das mit mysql_insert_id() automatisch garantiert?
Grüße, JN
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de