ADODB: Mehrere Inserts hintereinander funktionieren nicht
am 28.04.2006 18:13:55 von Jens Kuttig
Hallo,
ich habe hier ein Problem, zu dem ich keine Lösung finde:
In einer ersten Execute-Anweisung füge ich per Insert in die erste
Tabelle eine Zeile hinzu. Im nächsten Schritt lasse ich mir von dieser
soeben eingefügten Zeile den Wert der Spalte ID zurückgeben. In der
Anweisung füge ich in eine zweite Tabelle eine Zeile hinzu, die unter
anderem diesen ID-Wert enthält.
Mein PHP-Programm führt grundsätzlich nur die ersten beiden Abfragen
aus.
Hier der Code:
$tempConn =3D ADONEWConnection(DB_TYPE);
$tempConn->PConnect(DB_SERVER, DB_USERID, DB_PASSWORD, DB_DBNAME);
$tempSQL =3D 'INSERT INTO activities (title, index_image, image, ' .
'short_description, description, leaders, contacter, location, ' .
'meeting_day, beginn_time, end_time, in_school_vacation, ' .
'meeting_annotation) VALUES (' . $tempTitle . ', null, null, ' .
$tempShortDescription . ', ' . $tempDescription . ', ' .
$tempLeaders . ', ' . $tempContacter . ', ' . $tempLocation . ', ' .
$tempMeetingDay . ', ' . $tempBeginnTime . ', ' . $tempEndTime . ', '
..
$tempVacation . ', null)';
$tempResult =3D $tempConn->Execute($tempSQL);
[..]
$tempActivityId =3D getActivityId($aFormData);
// In einer zweiten Funktion wird hier mit SELECT id FROM activities...
// die ID des neuen Eintrags ermittelt
// Das funktioniert auch, ich bekomme die korrekte ID.
$tempSQL =3D 'INSERT INTO link___activitycategories___activities ' .
'(activitycategory, activity) VALUES (' . $tempCategoryId .
', ' . $tempActivityId . ')';
$tempResult =3D $tempConn->Execute($tempSQL);
// Es wird keine Fehlermeldung zurückgegeben.
$tempResult->Close();
$tempConn->Close();
Findet jemand von euch den Fehler oder kann mir jemand sagen, wie ich
das ganze eleganter lösen kann?
Danke.
Jens
Re: ADODB: Mehrere Inserts hintereinander funktionieren nicht
am 28.04.2006 19:26:38 von Dirk Brosowski
Jens Kuttig schrieb:
> Hallo,
>
> ich habe hier ein Problem, zu dem ich keine Lösung finde:
> In einer ersten Execute-Anweisung füge ich per Insert in die erste
> Tabelle eine Zeile hinzu. Im nächsten Schritt lasse ich mir von dieser
> soeben eingefügten Zeile den Wert der Spalte ID zurückgeben. In der
> Anweisung füge ich in eine zweite Tabelle eine Zeile hinzu, die unter
> anderem diesen ID-Wert enthält.
> Mein PHP-Programm führt grundsätzlich nur die ersten beiden Abfragen
> aus.
>
PHP ist hier offtopic. Du findest Hilfe in einer PHP-NG. Ich lese aus
Prinzip keinen PHP-Code ;)
Grüße
Dirk
Re: ADODB: Mehrere Inserts hintereinander funktionieren nicht
am 28.04.2006 23:50:00 von Axel Schwenke
"Jens Kuttig" <0123456789@gmx.de> wrote:
> ich habe hier ein Problem, zu dem ich keine Lösung finde:
> In einer ersten Execute-Anweisung füge ich per Insert in die erste
> Tabelle eine Zeile hinzu. Im nächsten Schritt lasse ich mir von dieser
> soeben eingefügten Zeile den Wert der Spalte ID zurückgeben. In der
> Anweisung füge ich in eine zweite Tabelle eine Zeile hinzu, die unter
> anderem diesen ID-Wert enthält.
> Mein PHP-Programm führt grundsätzlich nur die ersten beiden Abfragen
> aus.
Bis hier sehe ich keine Frage. Du beschreibst allerdings einen
recht sicheren Weg zu einer race condition.
> $tempConn->PConnect(DB_SERVER, DB_USERID, DB_PASSWORD, DB_DBNAME);
Falls das das gleiche macht, wie mysql_pconnect() dann will man
das nicht haben. pconnect() ist ein Würgaround für Datenbanken
mit schlechter connect-Performance. MySQL gehört nicht zu diesen.
> Findet jemand von euch den Fehler oder kann mir jemand sagen, wie ich
> das ganze eleganter lösen kann?
Wenn du einen Fehler bekommst, dann hast du davon bisher noch
nichts geschrieben. Aber ich vermute mal, du kennst die MySQL
Funktion LAST_INSERT_ID() bzw. deren PHP-Pendant noch nicht.
Mehr gibt meine Glaskugel leider nicht her.
Alles in allem solltest du üben, aussagekräftige Beschreibungen
für Fehler bzw. Probleme zu formulieren. Mit obigem ist auch mit
bestem Willen nicht viel anzufangen.
XL