Obba: mysql class

Hallo,

habe die Klasse hier gefunden:
http://snipplr.com/view/28046/simple-mysql-class/

und frage mich warum ich das nicht immer so gemacht habe :-)
Gibts da noch eine bessere Klasse mit noch mehr Funktionen?

(man kann ja mal fragen)

Obba

  1. Hi,

    und frage mich warum ich das nicht immer so gemacht habe :-)

    vielleicht weil Du eine vernünftige Fehlerbehandlung bevorzugst?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Moin!

    habe die Klasse hier gefunden:
    http://snipplr.com/view/28046/simple-mysql-class/

    und frage mich warum ich das nicht immer so gemacht habe :-)

    Weil du vernünftige Klassen programmieren willst.

    Weil du vernünftiger Fehlerbehandlung willst, z.B. vernünftiges Werfen von Exceptions.

    Weil du vernünftiges Escaping brauchst.

    Weil du die mysql_*-Funktionen nicht mehr einsetzen willst, sondern die MySQLi-Extension mit ihrem objektorientierten Interface.

    Weil du in der Result-Klasse Interfaces wie Countable, Iterator oder ArrayAccess implementieren willst.

    Gibts da noch eine bessere Klasse mit noch mehr Funktionen?

    Es gibt vor allem Klassen, bei denen man kein Augenkrebs kriegt, wenn man deren Code sieht.

    - Sven Rautenberg

  3. Wenn ich mir die Klasse ansehe, wird dein Code durch sie eigentlich so gut wie gar nicht kürzer. Die meisten Funktionen darin sind Einzeiler. Der Effekt wäre also nur, dass du einen Aufruf durch einen anderen ersetzt.

  4. Hello,

    Sven und Cheatah haben schon fast alles aufgezählt, waraum diese Klasse Unsinn ist.

    Die Klasse stellt leider nur einen mangelhaften bis ungenügenden Wrapper für bereits vorhandene und zudem noch überholte Funktionen dar. Das ist genau der Fall, den ich immer wieder aufs Korn nehme. Hier wird "OOP" nur seiner selbst wegen benutzt - ohne jeden Sinn und Verstand.

    Die Fehlerbehabndlung mit die() ist in dieser Form keine wirkliche Fehlerbehandlung, sondern bestenfalls ein Hilfsmittel für die Entwicklung. Das springt einem da zuerst ins Auge. Aber auch die Überlegung, ob die Methoden der Klasse alle public sein dürfen, fehlt hier augenscheinlich.

    Dazu gehört dann auch  die Wahl eines passenden Connects zur Datenbank. Das sollte ggf. als Singleton ausgeführt werden oder sogar als Singleton mit Lazy Connect.

    Es fehlen zudem Methoden zur Statusabfrage der Datenbank, zur Ermittlung von Spaltentypen, zur Ermittlung von Defaults, usw.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  5. Ok jetzt habe ich nur gehört, dass diese Klasse Schwachsinn ist, aber ich erkenne da auch einen Mehrwert nämlich das unkomplizierte zusammenwerfen mehrerer Abfragen verschiedener Datenbanken.

    Bisher hätte ich vor dem Abfragen immer wieder einen neuen include gemacht. In etwa so

      
    include("dbconnect_db_x.php");  
    mysql_query("SELECT whatever FROM tabelle"); # FROM DB x  
    ...  
    include("dbconnect_db_y.php");  
    mysql_query("SELECT whatever FROM tabelle"); # FROM DB y  
    ...  
    include("dbconnect_db_x.php");  
    mysql_query("SELECT whatever FROM tabelle"); # FROM DB x  
    
    

    So weise ich die DB einmal der Klasse zu und gut ist.

    Anders gefragt: Nutzt Ihr denn überhaupt gar keine Mysql-Class zu erleichterung? Wenn doch wie sieht die denn dann aus? :-)

    Obba

    1. Hi!

      Anders gefragt: Nutzt Ihr denn überhaupt gar keine Mysql-Class zu erleichterung? Wenn doch wie sieht die denn dann aus? :-)

      Das kommt drauf an. Ein kleines Projekt ist mit mysqli schnell realisiert. Größere Projekte benötigen insgesamt eine andere Vorgehensweise, so dass man bei Frameworks wie dem Zend Framework Vorteile finden kann, die unter anderem auch Lösungen für Datenbankthemen anbieten.

      Lo!

    2. Mahlzeit Obba,

      unkomplizierte

      ... ist in diesem Fall wohl offensichtlich ein eher subjektiver Begriff.

      Bisher hätte ich vor dem Abfragen immer wieder einen neuen include gemacht. In etwa so

      include("dbconnect_db_x.php");
      mysql_query("SELECT whatever FROM tabelle"); # FROM DB x
      ...

      Und *was genau* steht in Deinen "dbconnect_*.php"-Dateien? Lass mich raten: Du weist irgendwelchen globalen Variablen irgendwelche Werte zu und verlässt Dich dann darauf, dass anschließend jede folgende Abfrage schon irgendwie auf eine bestehende Verbindung zur Datenbank zugreifen kann?

      Dass Du der Funktion mysql_query() einen zweiten optionalen Parameter mitgeben kannst, ist Dir also nicht bekannt?

      Denn wüsstest Du das, wüsstest Du auch, dass Du nur genau *EINMAL* je *EINE* Verbindung zu allen von Dir benötigten Datenbanken herstellen musst und dann diese Verbindungen hier und da je nach Bedarf nutzen kannst.

      Anders gefragt: Nutzt Ihr denn überhaupt gar keine Mysql-Class zu erleichterung?

      Natürlich.

      Wenn doch wie sieht die denn dann aus? :-)

      Vernünftig.

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Anders gefragt: Nutzt Ihr denn überhaupt gar keine Mysql-Class zu erleichterung?

        Natürlich.

        Wenn doch wie sieht die denn dann aus? :-)

        Vernünftig.

        Sorry, aber könnte diese Klugscheißer-Antworten bringen mir nichts.
        Ich habe schon verstanden...
        Nur möchte ich auch endlich mal den Nutzen einer Mysql-Klasse kennenlernen.

        1. Mahlzeit Obby,

          Sorry, aber könnte diese Klugscheißer-Antworten bringen mir nichts.

          Deine Fragen geben nur dummerweise nicht viel mehr her - konkrete Probleme hast Du ja anscheinend nicht. Wenn Du erwartest, dass Du Dir die Recherche zum Thema "vernünftige PHP-Klasse für Zugriff auf MySQL-Datenbanken" sparen kannst, weil Du hier nach Abladen einiger Stichwörter und einem impliziten "Gib' ma' Infos!" sofort direkt seitenweise Rezensionen der verschiedenen existierenden Klassen und Herangehenweisen, garniert mit Links und Code-Beispielen, bekommst, hast Du Dich erheblich geschnitten.

          Frag doch erstmal bei der allwissenden Müllhalde nach, wühl Dich durch die Ergebnisse, eigne Dir Grundkenntnisse an, verschaffe Dir einen Überblick und wende Dich mit konkreten Fragen - bzw. wenn man erkennen kann, dass Du Dich bereits halbwegs mit dem Thema auseinandergesetzt hast - gerne wieder an dieses Forum.

          Nur möchte ich auch endlich mal den Nutzen einer Mysql-Klasse kennenlernen.

          Der größte Nutzen ist IMHO die Kapselung aller zum Thema "Datenbankzugriff" gehörenden Komponenten in je ein Objekt, das mir in der reinen Benutzung viel Arbeit abnimmt.

          MfG,
          EKKi

          --
          sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        2. Moin!

          Sorry, aber könnte diese Klugscheißer-Antworten bringen mir nichts.
          Ich habe schon verstanden...
          Nur möchte ich auch endlich mal den Nutzen einer Mysql-Klasse kennenlernen.

          Wenn du mit OOP in der Datenbank arbeiten willst, dann nutze mysqli. Und vergiss mysql.

          Denn da hast du alles, was du für den kleinen Bedarf an OOP brauchst, schon schön objektorientiert.

          Und wenn du mehr OOP brauchst, dann baust du dir die notwendigen Klassen selbst.

          Und wenn du wirklich viel OOP brauchst, dann nimmst du ein bestehendes Framework wie Doctrine, Propel, ... siehe http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#PHP und kümmerst dich um deine eigentliche Aufgabe, und nicht mehr so sehr um die SQL-Querys.

          Sven