Anlegen von Tabellen mit anschließendem Insert von Daten unter PHP

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo zusammen,

unter PHP habe ich mir ein Script gebastelt, dass Tabellen
von einer DB in eine andere kopiert.

Wenn die Tabelle in der Ziel-DB noch nicht vorhanden ist,
dann wird sie halt mit allem Pipapo anhand des Tebellen-Schemas
der Quellen-DB angelegt.

Soweit so gut. Klappt alles wunderbar, bis auf ein Manko.

Wenn die Tabelle in der Ziel-DB noch nicht vorhanden war
und neu angelegt werden musste, bricht das direkt folgende
Kopieren der Daten mit dem Fehler 204 "unknown table" ab.

Fakt ist aber, dass das Anlegen der Tabelle zu diesem Zeitpunkt
schon erfolgreich und fehlerfrei in der Ziel-DB gelaufen ist. Das
wird vorher überprüft.

Auch werden direkt nach dem Anlegen der Tabelle alle Ressourcen
zur Ziel-DB explizit freigegeben, ein Disconnect der Verbindung
zur Ziel-DB gesetzt und anschließend "frisch" neu "connected".

Hilft alles nichts.

Wenn ich aber dann "dasselbe" Script im Browser einfach nur
NEU lade, läutt das Daten-Pumpen OHNE Probleme durch.

Es ist auch egal welchen Treiber ich benutze, ob PEAR-Mdb2,
PDO oder Firebird. Mit allen dasselbe Problem.

Hat jemand eine Idee woran das liegt oder was für einen
Fehler ich mache ?

Gut, es wäre kein Problem das Daten-Pumpen durch ein
anderes Script in einem frischen Browser-Tab erledigen zu
lassen, aber so richtig sexy wäre das nicht.
bfuerchau
Beiträge: 546
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Das ist das Sichtbarkeitsproblem bei Transaktionen in der Firebird.

Nach einem CreateTable muss ja ein Commit gemacht werden, damit die Tabelle sichtbar wird.
Nun hast du ggf. über eine 2. Verbindung das Erstellen übernommen, so dass die Tabelle auf Grund der offenen Transaktion der 1. Verbindung noch verborgen bleibt.

Also Reihenfolge beachten:

- Start Transaction
- Create ....
- Commit Transaction

- Start Transaction
- Insert .....
- Commit Transaction

Nach Möglichkeit auf derselben Connection.
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Guten Morgen bfuerchau,

herzlichen Dank.

Passt. Einfach nur gut !

Gruss Hamburgo
Antworten