mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 10.12.2016 12:18 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: Zurück  1, 2, 3  Weiter
Autor Nachricht
Account gelöscht


Ort: -
Alter: -
Verfasst So 19.09.2004 19:41
Titel

Antworten mit Zitat Zum Seitenanfang

xschinkenx hat geschrieben:
pear::db


wenn das mal nicht implementiert ist, was dann!?
 
donnerchen

Dabei seit: 06.04.2003
Ort: -
Alter: 45
Geschlecht: Männlich
Verfasst So 19.09.2004 19:45
Titel

Antworten mit Zitat Zum Seitenanfang

Vielleicht solltest Du Dich erst mit PEAR:GrinsB vertraut machen bevor Du es als Beispiel anbringst:
DB is a database abstraction layer providing:
* an OO-style query API
* portability features that make programs written for one DBMS work with other DBMS's
* a DSN (data source name) format for specifying database servers
* prepare/execute (bind) emulation for databases that don't support it natively
* a result object for each query response
* portable error codes
* sequence emulation
* sequential and non-sequential row fetching as well as bulk fetching
* formats fetched rows as associative arrays, ordered arrays or objects
* row limit support
* transactions support
* table information interface
* DocBook and PHPDoc API documentation

Es geht hierbei primär um Datenbankabstraktion im Sinne von ODBC um von den mysql_X Funktionen loszukommen. Zwar kann die Methode prepare() das Vorbereiten einer Abfrage erleichtern aber DB macht ansich was komplett anderes.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
mööp
Threadersteller

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

Antworten mit Zitat Zum Seitenanfang

Also ich finde so eine Klasse praktisch, weil man weniger Code letztlich tippt. Wieso findet ihr die Methode unflexibel? ISt doch auch nur eine INSERT Methode, was vermisst ihr denn?

Ich werde noch eine SELECT, UPDATE un DELETE Methode hinzufügen, diese müssen natürlich um einiges flexibler sein, soviel ist mir auch klar.

Ich frage mich nur, warum es nicht sinnvoll sein soll? Die bisherige Methode kann man meiner Meinung bei jeder SQL Insert Anweisung anwenden, man tippt weniger Code und selbiger ist auch zugleich übersichtlicher, was sich wiederum bei der Wartung bezahlt macht.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


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

Antworten mit Zitat Zum Seitenanfang

donnerchen hat geschrieben:
Vielleicht solltest Du Dich erst mit PEAR:GrinsB vertraut machen bevor Du es als Beispiel anbringst:
DB is a database abstraction layer providing:
* an OO-style query API
* portability features that make programs written for one DBMS work with other DBMS's
* a DSN (data source name) format for specifying database servers
* prepare/execute (bind) emulation for databases that don't support it natively
* a result object for each query response
* portable error codes
* sequence emulation
* sequential and non-sequential row fetching as well as bulk fetching
* formats fetched rows as associative arrays, ordered arrays or objects
* row limit support
* transactions support
* table information interface
* DocBook and PHPDoc API documentation

Es geht hierbei primär um Datenbankabstraktion im Sinne von ODBC um von den mysql_X Funktionen loszukommen. Zwar kann die Methode prepare() das Vorbereiten einer Abfrage erleichtern aber DB macht ansich was komplett anderes.


Was willst du eigentlich? Erst sagste, dass man sowas nie braucht, dann, dass es nicht als pear-klasse vorliegt, und DANN behauptest du, pear-db sei zwar eine "datenbankklasse" im weitesten sinne, aber was ganz anderes, als das, um was es hier geht. Grins rauch' mal weniger *zwinker* (wobei ich dich nicht als doof hinstellen möchte, ich sehe schon, dass du weißt, wovon du redest, vielleicht musst du dich nur von anfang an klarer ausdrücken *zwinker*)

mööp hat geschrieben:
Also ich finde so eine Klasse praktisch, weil man weniger Code letztlich tippt. Wieso findet ihr die Methode unflexibel? ISt doch auch nur eine INSERT Methode, was vermisst ihr denn?

Ich werde noch eine SELECT, UPDATE un DELETE Methode hinzufügen, diese müssen natürlich um einiges flexibler sein, soviel ist mir auch klar.

Ich frage mich nur, warum es nicht sinnvoll sein soll? Die bisherige Methode kann man meiner Meinung bei jeder SQL Insert Anweisung anwenden, man tippt weniger Code und selbiger ist auch zugleich übersichtlicher, was sich wiederum bei der Wartung bezahlt macht.


Ich denke ebenfalls, dass alles Sinn macht, was Wiederholungen vermeidet. Damit hast du auf alle Fälle recht. Und - wie gesagt - als Anschauungsunterricht eignet sich die Programmierung einer Datenbankklasse (egal, wie man die sache jetzt anpackt, okay, donnerchen!? *zwinker*) imho gut.


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

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

Antworten mit Zitat Zum Seitenanfang

Hmmm, nun ja, für ein einfaches INSERT mag das stimmen. Da ich der Klasse allerdings mitteilen muss wie die Spalten heißen und wie die Werte lauten spare ich mir ja nur das INSERT INTO () VALUES und das ist nicht wirklich viel zu tippen. Dazu kommt noch, dass ich keine datenbankseitigen Funktionen nutzen kann. Wenn ich also z.B. auf die Funktion MD5() von MySQL zugreifen möchte oder einen Wert einfügen möchte der das Ergebnis eines anderen SELECTs ist, so kann ich das nicht. Wie gesagt, für ein einfaches INSERT mags gehen aber SQL-Anweisungen werden sehr schnell sehr komplex. Gerade für ein SELECT müsste so eine Klasse halt sehr, sehr umfangreich sein
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
donnerchen

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

Antworten mit Zitat Zum Seitenanfang

XSchinkenX hat geschrieben:
Was willst du eigentlich? Erst sagste, dass man sowas nie braucht, dann, dass es nicht als pear-klasse vorliegt, und DANN behauptest du, pear-db sei zwar eine "datenbankklasse" im weitesten sinne, aber was ganz anderes, als das, um was es hier geht. Grins rauch' mal weniger *zwinker* (wobei ich dich nicht als doof hinstellen möchte, ich sehe schon, dass du weißt, wovon du redest, vielleicht musst du dich nur von anfang an klarer ausdrücken *zwinker*)



Also, um es dann kurz nochmal zu erläutern:
1.) Ich halte so eine Klasse für unsinnig
2.) Wenn so eine Klasse Sinn machen würde, dann wäre sie sicher schon als PEAR-Klasse implementiert
3.) PEAR :: DB ist eine sehr gute Datenbankklasse (auch wenn DB ein wenig zu umfangreich ist und alles Datenbanken außer MySQL nicht wirklich gut unterstützt werden)
4.) PEAR :: DB will was ganz anderes als die Eingabe von SQL-Befehlen zu vereinfachen. DB möchte nur eine Unabhängigkeit von dem Third-Tier - sprich der Datenbank - ermöglichen. Einfaches Beispiel MySQL unterstützt die Constraint auto_increment wohingegen ich dieses Verhalten bei Oracle mithilfe einer Sequence und eines Triggers nachbilden müsste. DB kann das selber simulieren

Jetzt Besser verständlich? DB hat also ncihts mit dieser Fragestellung zu tun
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
donnerchen

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

Re: Klasse für SQL Anweisungen

Antworten mit Zitat Zum Seitenanfang

Um mich mal ein wenig konstruktiv zu zeigen hier noch ein paar Anmerkungen Lächel

mööp hat geschrieben:

Code:

<?php

class my_sql {
   
   function my_insert () {
      if(is_array($this->spalten)) {
      foreach($this->spalten as $spalte) {

            $str_spalten .= $spalte;
         }


Hier wäre ein implode() einfacher und schneller
mööp hat geschrieben:

Code:

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

               $str_werte .= $wert;
            }


Hier wäre ein implode() einfacher und schneller
mööp hat geschrieben:

Code:

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


Hier wäre ein Soltlest Du ein @ einfügen um Fehlermeldungen zu unterdrücken

mööp hat geschrieben:

Code:

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


Warumn nutzt Du hier plötzlich die alternative Syntax und bleibst nicht bei {}?
Des Weitere solltest Du mysqL_error() nutzen um feststellen zu können welcher Fehler aufgetreten ist.

Das nur mal am Rande. *zwinker*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


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

Antworten mit Zitat Zum Seitenanfang

dann drück dich doch direkt klar aus, ich hatte halt einfach die befürchtung,dass du den threadersteller verunsicherst ("ich halte so eine Klasse für unsinnig").

xschinkenx hat geschrieben:
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


jungejunge. aber ich finds gut, dass du dich so mit der sache beschäftigst und mal alternativen im quelletext aufzeigst. *Thumbs up!*
 
 
Ähnliche Themen if Anweisungen?
[SQL] Wie 6 Ergebnisse anzeigen ohne ID / andere SQL-Fragen
[PHP] Falsche If-Anweisungen?
klasse vom link durch JS ändern?!
BitmapData Klasse und loadmovie
Problem mit PHPMailer-Klasse
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  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.