mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 26.04.2024 01:55 Benutzername: Passwort: Auto-Login

Thema: Klasse für SQL Anweisungen vom 19.09.2004


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Klasse für SQL Anweisungen
Seite: 1, 2, 3  Weiter
Autor Nachricht
mööp
Threadersteller

Dabei seit: 29.08.2003
Ort: -
Alter: -
Geschlecht: -
Verfasst So 19.09.2004 16:23
Titel

Klasse für SQL Anweisungen

Antworten mit Zitat Zum Seitenanfang

Hallo zusammen,

bin gerade an einem privaten Projekt, wo ich zum ersten mal OOP nutze. Da es mich bisher immer ein wenig angeranzt hat, jede SQL Anweisung neu zu tippen, habe ich mir vorgenommen eine flexible Klasse zu proggen, die das übernimmt. Habe auch was hinbekommen, nun möchte ich aber von etwas erfahreneren Codern mal eine Meinung hören, ob das ganze auch sinnvoll und nützlich ist oder ob es geschicktere Lösungen bereits gibt.

Hier die Klasse mit einer ersten Methode für die immerwiederkehrenden INSERT Anweisungen *g

Code:

<?php
/*
   Klasse für SQL Abfragen/ Anweisungen.
   
   In den jeweiligen Funktionen kann man die benötigten Eigenschaften ablesen.
*/

class my_sql {
   
      // registrieren.php
   function my_insert () {

   /*
      $tabelle        Name der Tabelle in die geschrieben werden soll

      $spalten        Name der Spalte in die geschrieben werden soll, kann auch ein A R R A Y sein

                  Den Spaltennamen müssen im Array je ein Komma angefügt werden, außer beim letzten Namen.

      $werte          Inhalt der in Spalte eingefügt werden soll, wenn A R R A Y, dann auf selbe Reihenfolge wie bei spalten achten!

                      Die Werte müssen im Array so angegeben sein, dass jeder Wert beim auslesen in einfachen Anf.zeichen steht
                      und durch Komma getrennt sind, beim letzten Wert muss das Komma weggelassen werden.

      $erfolg         Meldung die bei korrekter Ausführung zurückgegeben wird - Rückgabewert für return

      $fehler         Meldung die bei einem Datenbankfehler zurückgegeben wird.

      $db_connect     Datenbankverbindung

      Hier ein Beispiel für die Definition der Eigenschaften:

                   $insert_ob = new my_sql;

                  $insert_ob->tabelle    = 'user';
                  $insert_ob->spalten    = array("name, ","passwort, ","email");
                  $insert_ob->werte      = array("'$username', ","'$passwort', ","'$email'");
                  $insert_ob->erfolg       = 'Vielen Dank für Deine Registrierung. Deine Daten wurden gespeichert.';
                  $insert_ob->fehler       = 'Fehler: Ein Datenbankfehler trat auf. Es wurden keine Daten gespeichert.<br />Bitte versuche es später nochmal.';
                  $insert_ob->db_connect    = $db_connect;

                  $insert_regdaten = $insert_ob->my_insert();

                  echo $insert_regdaten; // Gibt Meldung $erfolg oder $fehler aus.


      Stand: 19.09.2004
   */

         // wenn mehrere Spalten geändert werden sollen - meistens der Fall...
      if(is_array($this->spalten)) {

         foreach($this->spalten as $spalte) {

            $str_spalten .= $spalte;
         }

            foreach($this->werte as $wert) {

               $str_werte .= $wert;
            }

         $sql    = 'INSERT INTO ' . $this->tabelle . ' (' . $str_spalten . ') VALUES (' . $str_werte . ')';
         $query    = mysql_query($sql, $this->db_connect);

               // wenn ein Datenbankfehler auftrat
            if($query == FALSE) : return $this->fehler;
            endif;

         return $this->erfolg;
      }

            // wenn nur in eine Spalte geschrieben werden soll. Fast nie der Fall...
         else {
            $sql    = 'INSERT INTO ' . $this->tabelle . ' (' . $this->spalten . ') VALUES (' . $this->werte . ')';
            $query    = mysql_query($sql, $this->db_connect);

               // wenn ein Datenbankfehler auftrat
            if($query == FALSE) : return $this->fehler;
            endif;

            return $this->erfolg;
         }

   } // Ende der Funktion my_insert()
   
} // Ende der Klasse my_sql


Zuletzt bearbeitet von mööp am So 19.09.2004 17:26, insgesamt 5-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Waschbequen
Account gelöscht


Ort: -

Verfasst So 19.09.2004 16:40
Titel

Antworten mit Zitat Zum Seitenanfang

Wenn man schon keine Möglichkeit hat, die Logik komplett in der Datenbank abzuwickeln (oder kann MySQL mittlerweile Stored Procedures?), dann sollte man das ganze wenigstens direkt im Code so aufbauen, dass es möglichst schnell verstanden wird. Von dir, wenn du das Zeug in 5 Jahren nochmal anfassen musst, für andere, die mit dir zusammenarbeiten usw. Und da ist sowas imho nicht sehr prickelnd - wenn ich mir vorstelle, ich kriege den Code vorgeschmissen und muss damit arbeiten, dann wäre es um vieles einfacher, wenn ich direkt verstehen könnte, was da passiert...

Und mal davon abgesehen wirst du damit auch nie hundert Prozent deiner Anforderungen erfüllen - bei Joins und Unions geht's ja schon los...
 
Anzeige
Anzeige
mööp
Threadersteller

Dabei seit: 29.08.2003
Ort: -
Alter: -
Geschlecht: -
Verfasst So 19.09.2004 16:47
Titel

Antworten mit Zitat Zum Seitenanfang

Also ich habe mir bei der Logik des Codes sehr viel Mühe gegeben. Ich denke, wenn man sich damit 5 Minuten intensiv auseinandersetzt und etwas Ahnung hat, dann versteht man den Ablauf ohne Probleme.

Nich umsonst habe ich auch ein Beispiel mit in die Kommentare gepackt. Eigentlich müsste man nur schnell den Code kopieren, seine Daten für Datenbankverbindung raussuchen, eine Tabelle zum Testen anlegen und das Beispiel mit seinen Daten ändern.

PS:
hier hats natürlich kein Syntaxhighlightning, das macht den code natürlich etwas unleserlich. Im Editor blickt man sicher besser durch.

PPS:
Stored Procedures sind ab MySQL 5 möglich.


Zuletzt bearbeitet von mööp am So 19.09.2004 16:49, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Waschbequen
Account gelöscht


Ort: -

Verfasst So 19.09.2004 18:23
Titel

Antworten mit Zitat Zum Seitenanfang

Ich erkenne dir ja auch deine Leistung nicht ab, kenne ja selber das gute Gefühl, wenn man was nach eigener Ansicht richtig geiles programmiert hat *zwinker*

Ich hab' in meinen Anfängen ähnliche Ansätze gehabt und auch solche Funktionen (mangels vernünftiger KLassenlogik damals in VBScript) gebaut, dann aber sehr schnell in der Praxis gesehen, dass das nicht hinhaut.

Wenn ich mir jetzt meinen Code von vor 3 Jahren anschaue, wo ich eben sowas gemacht habe, dann schlage ich die Hände überm Kopf zusammen - und der Aufwand ist eben um einiges höher das Zeug zu warten, da ich mich jedesmal erst einarbeiten muss.
 
Account gelöscht


Ort: -
Alter: -
Verfasst So 19.09.2004 20:03
Titel

Antworten mit Zitat Zum Seitenanfang

Ich weiß nicht, ob ich dein Script als praktisch empfinden würde, es kommt mir so ein wenig unflexibel vor, was die Konstruktion auch komplexer sql-Statements angeht. Zum Lernen objektorientierter Programmierung (find ich schöner als das Unwort OOP "proggen" *zwinker* ) ist das Schreiben eine Datenbankklasse aber sicher nicht das schlechteste, daher *Thumbs up!* .

Zitat:
oder ob es geschicktere Lösungen bereits gibt


Ja, die gibt es, sogar "Datenbankunabhängig":

pear::db
 
donnerchen

Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht: Männlich
Verfasst So 19.09.2004 20:15
Titel

Antworten mit Zitat Zum Seitenanfang

Hai!

Ich befürchte, dass es wenig Sinn macht eine solche Klasse zu basteln. Man braucht SQL-Befehle ja nun nicht soooo schrecklich oft und dann sind die teilweise doch recht individuell. Soi müsstest Du beim Aufruf einer Methode ja immernoch die Spaltennamen und die Werte angeben. Und da kannst Du auch gleich den ganzen Befehl tippen.
Ganz schwierig wird's dann bei Selects. Wenn Du ein Join oder eine verschachtelte Abfrage bauen willst dann müsste die Klasse schon sehr, sehr flexibel sein...
Neeee, ich glaube das macht keinen echten Sinn

*wink*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst So 19.09.2004 20:33
Titel

Antworten mit Zitat Zum Seitenanfang

bitte!? *balla balla*

natürlich macht das sinn.


Zuletzt bearbeitet von am So 19.09.2004 20:34, insgesamt 1-mal bearbeitet
 
donnerchen

Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht: Männlich
Verfasst So 19.09.2004 20:38
Titel

Antworten mit Zitat Zum Seitenanfang

Nun, wenn es denn Sinn macht, dann stellt sich die Frage warum es noch niemand als PEAR-Paket implementiert hat.
Das ist einfach zu komplex um es sinnvoll zu bauen. Gerade ein SELECT kann so komplex sein, dass es nicht mit einem vertretbaren Aufwand abgebildet werden kann. Sicher kann man eine verschachtelte Query auf Basis eines endlichen Automatens (Compilerbau) zu implementieren aber der Aufwand ist roß unsd PHP wäre das falsche Tool. Da müsste man schon auf yacc oder so zurückgreifen
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen if Anweisungen?
[PHP] Falsche If-Anweisungen?
SVG id aktiviert Klasse
[AS2] - Tween-Klasse verwenden
BitmapData Klasse und loadmovie
[CSS] Hover in Css Klasse einfügen ?
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2, 3  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.