- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 08-02-2007, 13:22
dr.colossos
 Newbie
Links : Onlinestatus : dr.colossos ist offline
Registriert seit: Aug 2006
Beiträge: 10
dr.colossos ist zur Zeit noch ein unbeschriebenes Blatt
Standard PostgreSQL & Transaktionen

Hi,

ich habe folgenden (Pseudo-)Code:

Code:
PHP-Code:
... BEGIN $err updateTable1();    // update Table1 => führt UPDATE-Befehl aus und liefert FALSE wenn alles okay, TRUE bei Fehler // hole andere Daten aus DB $var getResultOfQuery("SELECT * FROM anyTable"); if(!$err) $err updateTable1();     // update Table2 => ührt UPDATE-Befehl aus und liefert FALSE wenn alles okay, TRUE bei Fehler if(!$err) COMMIT else ROLLBACK ... 
Problem ist, dass wenn das 1. update auf der DB schief geht, dann wird NICHTS mehr ausgeführt. Das der 2. update Befehl, bzw. Inserts nicht mehr gemacht werden ist klar, aber ich würde gerne noch Daten LESEN (d.h. SELECTs ausführen) können.

Wie kann ich das bei PGSQL machen? Andere Datenbanksysteme unterstützen das, gibt's bei PGSQL eine Einstellung?

Btw, einen Work-Around suche ich nicht wirklich, der Code sollte/muss so bleiben .. aber ich freu mich auch über work-arounds ...

Danke

Edit: Code formatiert

Geändert von asp2php (08-02-2007 um 20:02 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 08-02-2007, 20:06
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.746
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hm ... ich verstehe nicht ganz was du machst. Du packst die Aktionen in einer Transaktion, weil sie abhängig voneinander sind! Also was soll der Unfug, weiter zu machen, anstatt ein Rollback zu senden und wieder von vorne zu beginnen?

Ansonstens beschäftige dich z.B. mal mit PL/pgSQL, damit kannst du solche komlexe Vorgänge dem SQL-Server ganz überlassen.
Mit Zitat antworten
  #3 (permalink)  
Alt 08-02-2007, 21:33
dr.colossos
 Newbie
Links : Onlinestatus : dr.colossos ist offline
Registriert seit: Aug 2006
Beiträge: 10
dr.colossos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Es ist so. Programmiert wird in meinem Projekt nach einem Framework, daher ist die Sache so schlecht zu ändern.

Der Anwendungsfall wo das Problem u.a. Auftritt:

0. BEGIN Transaction
1. Änderung an der Datenbank, welche einen Fehler produziert (Constraint verletzt, Syntax falsch etc.)
2. Lesen (z.B. "SELECT fehlermeldung from meldungen") der zugehörigen selbsterstellten Fehlermeldung aus Datenbank (funktioniert mit MSSQL, Oracle, in PGSQL wird der SELECT nicht mehr ausgeführt).
3. ROLLBACK

Angeblich ist es auch nicht möglich in PGSQL SELECTs auszuführen wenn die Transaktion schon gescheitert ist (hab ich aus anderem Forum).

Einzige Möglichkeit wäre es mit Exceptions seitens der Datenbank zu machen - das geht allerdings nicht mehr bei Syntaxfehlern. Da dies aber bei uns auch auftreten kann (SQL werden dynamisch erzeugt, und durch einen Bug kann da auch mal Schrott rauskommen) ist diese Lösung auch keine wasserdichte.

EDIT: Das Framework ist eigentlich das Problem. Wenn's keinen work-around gibt, dann wird's wohl am besten sein, das auslesen der Fehlermeldung in eine eigene Transaktion zu verschieben.

Geändert von dr.colossos (08-02-2007 um 21:41 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 08-02-2007, 22:09
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.746
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Für solche Sachen schreibe ich lieber ein stored procedure und lasse die Aktionen direkt in der DB ausführen, die Fehlerbehandlung wird direkt in SP abgefertigt und man bekommt entweder die OK-Meldung oder entprechende Fehlermeldung als Rückgabe. Das ist in meinen Augen am sauberstens.
Mit Zitat antworten
  #5 (permalink)  
Alt 08-02-2007, 22:14
dr.colossos
 Newbie
Links : Onlinestatus : dr.colossos ist offline
Registriert seit: Aug 2006
Beiträge: 10
dr.colossos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, wenn man nicht verschiedenste Datenbanksysteme (MSSQL, Oracle, PGSQL und u.U weitere) unterstützen müsste schon.

So aber bräuchte man für jedes DBMS eine eigene stored procedure.

Auch können die Fehlermeldungen Laufzeit-abhängig sein, und spätestens dann ist eine Lösung rein auf der Datenbank nicht mehr machbar.
Mit Zitat antworten
  #6 (permalink)  
Alt 08-02-2007, 22:27
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.746
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich würde sagen, dann habt ihr euch ja mit Unterstützung mehrere Datenbanksysteme zu leicht gemacht. Das DBMS ist mächtig durch seine besonderen Features, zusätzlich zu den Standard. So wie ihr das macht, nützt ihr das DBMS nur in seine Elementarfunktionen. Die ganzen bequemlichkeiten wie Views, Stored Procedure, User Function, Trigger, Cursor, ... werden nicht angerührt und somit ist das DBMS kaum ausgelastet, und der Client hat dagegen alle Hände voll zu tun. Das ist aber nicht der Sinn der Sache. Das, was man datenbankseitig lösen kann, soll man ja auch dem DBMS überlassen. Wir machen das so: bei der Installation des Programms (WinApp, WebApp) muss der User entscheiden, was er nehmen will (DB2, MS-SQL, Oracle), dann werden entsprechende SP, Views, ... in die DB erzeugt und das Programm kann voll darauf zugreifen. Die Arbeit muss aber einfach gemacht werden, wenn man mehrere DBMS unterstützen will.
Mit Zitat antworten
  #7 (permalink)  
Alt 08-02-2007, 22:48
dr.colossos
 Newbie
Links : Onlinestatus : dr.colossos ist offline
Registriert seit: Aug 2006
Beiträge: 10
dr.colossos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du hast sicher recht das euer Ansatz sicher gerechtfertig ist - bringt aber auch Probleme mit sich.

Unser System (PHP & DB) lauft schon seit Jahren und wurde Ende der 90er begonnen, daher wird das wohl nie abgeändert - und es ist keines Falls ein kleines System.

Aber du kannst dir vorstellen das solch eine "Migration" ohne ein 90% redesign aller Programm-Module und natürlich der Datenbank nicht möglich ist ...

Btw, Views verwendet das System schon (is ja Standard-Syntax), aber stored procedures und triggers (leider) nicht ...

Hmmm, während ich das schreibe kreist das Wort "Machbarkeitsstudie" in meinem Kopf umher, hehe.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:07 Uhr.