Datenbankverbindung und Verwaltungsmethoden objektorientiert

  • Sprache: PHP , SQL

    Problem:
    Ich versuche seit längerer Zeit Verwaltungsmethoden für MySQL-Abfragen, Updates usw. zu realisieren. Da keine Ausgabe erfolgt ist
    meine Methode sicherlich falsch. Ich habe die Methoden deklariert in der Klasse z.B. in folgender Struktur:

    Code
    public function query_assoc( $sql )
    {
      mysql_fetch_assoc(mysql_query($sql));
    }

    Dies funktioniert aber nicht, da keine Ausgabe erfolgt. (Der SQL-Befehl im Anwendungsprogramm ist einwandfrei.)
    Nun, früher wurde mir schonmal gesagt, dass man so ein Problem mit Hilfe einer zweiten Klasse lösen kann. Nun wollte ich
    fragen wie ich das realisieren kann, da ich noch nicht so der Profi bin.

    Wäre dankbar für jede Hilfe[/code]

  • ich denke du willst eher das hier:

    Code
    public function query_assoc( $sql )
    { return mysql_fetch_assoc(mysql_query($sql));
    }

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Ist zwar noch nicht an PHP5-OOP angepasst, aber vielleicht hilft dir das weiter:


    Außerdem ist so eine verschachtelung

    Code
    mysql_fetch_assoc(mysql_query($sql));


    eine mittlere katastophe

  • Zitat von bandit600


    Außerdem ist so eine verschachtelung

    Code
    mysql_fetch_assoc(mysql_query($sql));


    eine mittlere katastophe

    Erstmal danke an euch beiden für die Hilfe. Aber was gibt's an solchen Verschachtelungen auszusetzen?

  • Hats geklappt mit dem return?
    denke nämlich du wilst das was aus fetch() ausgelesen wird auch irgendwo speichern und weiterverwenden ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Zitat von Creamroyal

    Erstmal danke an euch beiden für die Hilfe. Aber was gibt's an solchen Verschachtelungen auszusetzen?

    Zum Beispiel erschwert es die Fehlersuche bei Fehlverhalten des Scriptes.

    Gruß,
    Jojo


  • Zitat von Dodo

    Hats geklappt mit dem return?
    denke nämlich du wilst das was aus fetch() ausgelesen wird auch irgendwo speichern und weiterverwenden ;)

    Jo das mit dem return hat geklappt. Zieht eine Verschachterlung auch Sicherheitsbedenken mit sich (oder erschwert
    es nur die Analyse von Fehlern usw.?)

    Nunja, ich wollte gerne eine Gildensoftware schreiben. Prozedual ist das kein Thema, allerdings wollte ich das gerne objektorientiert
    gestalten, damit ich mich so weiterentwickeln kann und dazu lerne.

  • Dann gib einfach die Verschachtelung weg?

    Code
    public function query_assoc( $sql )
    { $daten = mysql_query($sql);
      $ausgelesen = mysql_fetch_assoc($daten);
      return $ausgelesen;
    }

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Zitat von Dodo

    Dann gib einfach die Verschachtelung weg?

    Code
    public function query_assoc( $sql )
    { $daten = mysql_query($sql);
      $ausgelesen = mysql_fetch_assoc($daten);
      return $ausgelesen;
    }

    Dann bleibt doch die Erschwerung der Fehlersuche erhalten oder irre ich mich da jetzt?

    Edit: Ich habe einen verallgemeinernden Weg (sofern dieser korrekt ist) gefunden:

    Code
    public function query( $sql, $type ) {
      $query = mysql_query($sql);
      return $result = $type($query);
    }

    Diese Methode soll flexibel sein, sprich es können verschiedene Mysql-Methoden eingesetzt werden (mysql_fetch_assoc, mysql_fetch_array, mysql_num_rows usw.)
    Wäre diese Lösung ein guter Weg oder würdet ihr mir davon abraten?

  • Es ist nicht eine der dümmsten ideen, nach mysql_query einen eventuellen fehler abzufangen, alles andere wäre eine schlechte programmierung.

  • Mach mal diesen hier ;)

    Code
    public function query( $sql, $type ) {
      $query = mysql_query($sql) OR die(mysql_error());
      return $result = $type($query);
    }

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Eine klasse, die mein script bei einem fehler abbricht, würde ich nicht benutzen!

  • Zitat von No0ob

    Mal ganz doof gefragt:
    Was ist denn $type($query); ?

    $type soll die Art des Befehls bestimmen sprich

    z.B. grob gesagt:

    $type = mysql_fetch_assoc;
    dann lautet die Syntax = mysql_fetch_assoc($query);

    Andersrum z.B. auch:

    $type = mysql_num_rows;
    dann lautet die Syntax = mysql_num_rows($query);

  • Ok, das hab ich mir gedacht. Der Codestil hat mich nur etwas verwirrt.
    Normalerweise sollte man sowas ueber Treiber loesen, sodass du dann Sub-Klassen fuer die verschiedenen Verbindungstypi definierst und dann einbindest.
    Es kommt eventuell vor, dass eine Funktion andere Parameter erwartet, je nachdem welche Datenbank du hast.