Hallo Forum,
Erstmal danke André für deine Hilfe.
Mit den Oids wird es leider nicht eindeutig :-(
Siehe die Kommentare auf http://ch.php.net/manual/en/function.pg-last-oid.php
Dort ist auch mein Ansatz mit der "Nextval" - Methode beschrieben.
Dank auch an Daniela für ihre Tipps im Chat!
Nochmals das ganze: ;-)
Folgende Problematik:
Ich habe zwei Tabellen in einer Postgre-Datenbank:tabelle1
+------+--------+
| id1 | desc |
+------+--------+id1: bint, not null, primary, default: nextval('tabelle1_id_seq')
tabelle2
+------+--------+---------+
| id2 | id1 | name |
+------+--------+---------+(Das ist nur eine Beispielstruktur! Bitte nicht über deren Sinn diskutieren *g*)
"Id1" hat eine Sequenz namens ("tabelle1_id_seq" --> default values!)
******* dump.sql ******
-- tabelle 1 erstellen
CREATE TABLE "public"."tabelle1" (
"id1" BIGSERIAL NOT NULL,
-- mit einer id vom typ serial oder bigserial werden sequenz und defaultvalue automatisch erstellt.
"desc" CHAR(50),
PRIMARY KEY("id1")
) WITH OIDS;-- sequenz erstellen
-- CREATE SEQUENCE "tabelle1_id_seq";
-- habs jetzt mit "bigserial" gelöst
-- default wert für primary setzten
-- ALTER TABLE "public"."tabelle1" ALTER COLUMN "id1" SET DEFAULT nextval('tabelle1_id_seq');
-- wird auch nicht mehr benötigt (wegen "bigserial")
*******
Ziel ist: Ich möchte eine neue Zeile in die Tabelle1 schreiben und brauche die neue Id für die Eingabe in Tabelle2 (foreign key).
(Tabelle2 ist nur zur Veranschaulichung und wird für die Testumgebung nicht benötigt)
Mit folgendem PHP Code funktioniert das ganze plötzlich. Schön, ich weiss nur nicht so genau, was ich zuvor falsch gemacht habe...
Für die Akten:
********** schnipp *************
$query = $_GET["seq"];
// zuerst die nächste id in der sequenz auslesen
for ($i = 0; $i < 1000; $i++) {
$sql = "select nextval('tabelle1_id1_seq') as nextid;";
$rs = pg_exec($conn, $sql);
$rn = pg_numrows($rs);
if ($rn > 0) {
$nextIdArr = pg_fetch_array($rs,0);
//if ($nextIdArr[nextid] > 1) {
$nextId = $nextIdArr[nextid];
//}
}
$sql = "insert into tabelle1 (id1, name)";
$sql .= " values ($nextId,";
$sql .= " 'test $i $query')";
pg_exec($conn, $sql);
pg_freeresult($rs);
echo "$i<br>";
}
************ schnapp ************
Das ganze funktioniert tadellos plötzlich *g*
Zum testen die Seite mit verschiedenen "?seq=xxx" aufrufen und dann in der Datenbank nachkucken.
Supi, dupi - alle glücklich *g*
Grüsse
Siramon,
ja der Penner aus Nr. 14