trinita: Trennen von PHP- und MySQL-Code / MySQL-Bibliothek

Hallo!

Weil ich PHP-Code und MySQL-Abfragen getrennt halten wollte, habe ich mir neulich ein paar PHP-Klassen geschrieben, die die MySQL-Abfragen erzeugen. D.h. in Skripten, die diese Klassen verwenden, kann ich Datenbankabfragen jetzt etwa so formulieren:

$query = new Select();
$query->set_table("my_table");
...
$result = $query->execute();

Nun decken meine Klassen bei weitem nicht alle Möglichkeiten ab, die MySQL bietet. Kennt daher jemand eine Bibliothek, die diesen Zweck erfüllt und die ich stattdessen verwenden könnte?

Viele Grüße,
trinita

  1. Hallo!

    Weil ich PHP-Code und MySQL-Abfragen getrennt halten wollte, habe ich mir neulich ein paar PHP-Klassen geschrieben, die die MySQL-Abfragen erzeugen. D.h. in Skripten, die diese Klassen verwenden, kann ich Datenbankabfragen jetzt etwa so formulieren:

    $query = new Select();
    $query->set_table("my_table");
    ...
    $result = $query->execute();

    Was sollen die Klassen, die Du suchst, denn können, was mysqli nicht kann? Mir kommt es so vor, als ob Du mit Deiner Select-Klasse deutlich mehr PHP-Code brauchst, bis Du mal ne Datenbankabfrage auf den Weg geschickt hast, als mit nem einfachen Query per mysqli.

    Viele Grüße
    der Bademeister

    1. Hallo Bademeister,

      Was sollen die Klassen, die Du suchst, denn können, was mysqli nicht kann? Mir kommt es so vor, als ob Du mit Deiner Select-Klasse deutlich mehr PHP-Code brauchst, bis Du mal ne Datenbankabfrage auf den Weg geschickt hast, als mit nem einfachen Query per mysqli.

      Sie sollen nicht wirklich etwas können, was mysqli nicht kann. Es geht mehr darum, MySQL-Abfragen per PHP zusammenzusetzen.

      Und ja, der PHP-Code könnte dabei gelegentlich länger werden als wenn man einfach eine MySQL-Abfrage hinschreibt. Dafür hat man nicht zwei Sprachen gemischt in der Datei stehen, sondern nur PHP. (Ist mir schon klar, daß das Geschmackssache ist ...)

      trinita

      1. Und ja, der PHP-Code könnte dabei gelegentlich länger werden als wenn man einfach eine MySQL-Abfrage hinschreibt. Dafür hat man nicht zwei Sprachen gemischt in der Datei stehen, sondern nur PHP. (Ist mir schon klar, daß das Geschmackssache ist ...)

        Ah ok, langsam verstehe ich zumindest, was Du willst. Da weiß ich leider nicht, ob es was vernünftiges in der Art gibt.

        Ich weiß nicht, ob Dich meine Meinung dazu interessiert, ob das sinnvoll ist oder nicht, denn das war ja nun nicht die Frage, aber ich tue sie einfach mal kund:
        Ich würde Dir aus praktischen Gründen nicht zu so etwas raten. Denn Du würdest SQL dabei ja nicht umgehen, sondern letztlich führst Du eine Art weitere Sprache ein, die wiederum von der Funktionalität Deiner Klassen in SQL übersetzt wird.
        Dann ist je nach persönlichem Geschmack der jeweilige PHP-Code vielleicht etwas hübscher, aber bei Lichte betrachtet viel mehr und viel komplizierter.
        Wenn Du dann nach einem Jahr mal wieder in Deinen Code guckst und Deine MySQL-Anfragen verstehen (und evtl. ändern) willst, dann musst Du Deinen PHP-Code wieder gedanklich in SQL-Code umwandeln, um überhaupt zu sehen, was los ist.

        Und ich kann mir auch kaum vorstellen, dass jemand es geschafft (bzw. überhaupt ernsthaft versucht) hat, SQL halbwegs flächendeckend in PHP-Klassen modelliert zu haben, denn das wäre eine Mammutaufgabe. SQL-Statements können mitunter ganz schön kompliziert sein...

        viele Grüße
        der Bademeister

        1. Schaut so aus, als hätte ich da was gefunden:

          http://propel.phpdb.org/

          bzw.

          http://www.phpdoctrine.org/

          Das bedarf wohl einiger Einarbeitung und kann mehr, als ich ursprünglich angedacht hatte, ist aber wahrscheinlich eine umfassende Lösung.

          1. echo $begrüßung;

            Schaut so aus, als hätte ich da was gefunden:
            Das bedarf wohl einiger Einarbeitung und kann mehr, als ich ursprünglich angedacht hatte, ist aber wahrscheinlich eine umfassende Lösung.

            Jedes System, das darauf angelegt ist, dir Arbeit abzunehmen, kann das nur tun, indem es die Standardfälle in ein Schema F gießt. Standardfälle sind zwar die am meisten vorkommenden, aber sie helfen dir dann nicht mehr, wenn du vom Standard abweichen musst, um beispielsweise ein Feld nicht direkt anzusprechen sondern eine Funktion in den SQL-Code einbauen musst, ein kompliziertes Join-Gebilde brauchst, kurz, alles was von 0815-Statements abweicht. Und dann fehlt oftmals die Flexibilität, um das Ergebnis, um das Ziel zu erreichen, oder es wird am Ende komplizierter als wenn du dir eine einfache Funktion anlegst, die dein SQL-Statement als Prepared Statement in Reinform enthält und nur noch Platzhalter-Werte hinzufügend an das DBMS übergibt, sowie das Ergebnis in Empfang nimmt. Alternativ kann man kompliziertes DB-Handling auch in die DB in Form von Views und Stored Procedures verlagern. Dann kannst du meist auch wieder mit 0815-Zugriffsmethoden arbeiten.

            echo "$verabschiedung $name";

    2. "ez select" geht in die Richtung, die ich meine:

      http://webscripts.softpedia.com/scriptDownload/EZ-Select-Download-12703.html

      Ist aber nur für select queries ...