Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [PHP, MySQL] Codedesign (https://www.delphipraxis.net/161511-%5Bphp-mysql%5D-codedesign.html)

Luckie 6. Jul 2011 19:44

Datenbank: MySQL • Version: ??? • Zugriff über: PHP

[PHP, MySQL] Codedesign
 
Hallo,
ich habe mir eine private Adressdatenbank geschrieben, die auf meinem Webspace liegt. Jetzt habe ich gerade daran gebastelt und dabei ist mir aufgefallen, dass alle Abfragen verstreut in den PHP Dateien herumliegen. Jetzt hab eich mir gedacht, ob es nicht sinnvoll wäre alle Abfragen in einer PHP Datei zu sammeln. Dann wäre das etwas einfacher, wenn man was ändert und man hat dann auch keinen doppelten Code.

Was meint ihr dazu? Oder wie macht man so was normalerweise?

mkinzler 6. Jul 2011 19:46

AW: [PHP, MySQL] Codedesign
 
Am Besten als parametrisierte Abfragen

Luckie 6. Jul 2011 19:49

AW: [PHP, MySQL] Codedesign
 
Jetzt haben wir eine Überschneidung mit meinem andren Thema. Ich suche gerade mit Google. Hast du da gerade einen Link parat, wo ich das mal nachlesen kann? Oder kannst du das hier kurz erklären, wie das funktioniert?

mkinzler 6. Jul 2011 19:52

AW: [PHP, MySQL] Codedesign
 
Siehe anderen Beitrag.

Luckie 6. Jul 2011 19:58

AW: [PHP, MySQL] Codedesign
 
:mrgreen: Siehe anderen Beitrag. ;)

s.h.a.r.k 6. Jul 2011 20:57

AW: [PHP, MySQL] Codedesign
 
Wenn du OO programmierst, dann kannst du ja alles in entsprechende Klassen kapseln und brauchst die Abfragen nicht irgendwo sammeln -- oder handhabst du das in Delphi auch so? Zudem würde ich mir zugleich dann noch das MVC-Pattern anschauen, da ich nur noch damit programmieren würde. Schau dir vielleicht mal aktuelle Frameworks an, die das so umsetzen. Ich nutze zurzeit Yii, denn davon kann man sich recht viel abgucken, wie man es in PHP in etwa machen sollte und was alles möglich ist.

Und hier noch der Link zum anderen Thema ;)

Luckie 6. Jul 2011 21:33

AW: [PHP, MySQL] Codedesign
 
Na ja, der Code ist entstanden, da habe ich von PHP und Klassen noch keine Ahnung gehabt. Deswegen dachte ich eine kleiner Verbesserung wäre die Abfragen erst mal zentral zusammeln.

s.h.a.r.k 6. Jul 2011 21:44

AW: [PHP, MySQL] Codedesign
 
Hm, wenn du nicht unbedingt auf OOP umsteigen willst, dann würde ich höchstens "Getter"-Methoden zentral sammeln, die dann als Parameter eben die Params für die Query verlangen. Das kann den anderen Code schon übersichtlicher machen.

Aber ich würde mir da meist die Arbeit machen und auf ein FW umsteigen. Hat den Grund, dass man dabei viel lernen kann und zum anderen auch schon sehr viel bzgl. ORM etc. gelöst hat.

Luckie 6. Jul 2011 21:50

AW: [PHP, MySQL] Codedesign
 
Getter-Methoden? Was meinst du damit? Die gibt es doch ohne OOP gar nicht. Und bevor ich irgendwelche Frameworks einsetze, wollte ich eigentlich lernen was da im Hintergrund passiert.

s.h.a.r.k 6. Jul 2011 22:20

AW: [PHP, MySQL] Codedesign
 
Das alles ist ohne Gewähr, dass es funktioniert ;) Ist einfach mal schnell runtergeschrieben! Hier mal wie ich mir die "Getter"-Methoden vorstellen könnte -- das Getter war extra in Anführungszeichen geschrieben, da ich damit eher das "Daten-Holen" meinte.
Code:
<?php
// 
define('TABLE_USER', 'my_users');

//
$pdoConnection = null;

//
function getPdoConnection()
{
    global $pdoConnection;
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    try {
        $pdoConnection = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        die('Connection failed: ' . $e->getMessage());
    }
}

//
function getAllUsers()
{
    $sql = 'SELECT * FROM :table';
    $connection = getPdoConnection();
    $query = $connection->prepare($sql);
    $query->bindParam(':table', TABLE_USER, PDO::PARAM_STR);
    $query->execute();
    if ($query === false) {
        return false;
    } else {
        return $query;
    }
}

function gerUser($username = '')
{
    $sql = 'SELECT * FROM :table WHERE username = :username';
    $connection = getPdoConnection();
    $query = $connection->prepare($sql);
    $query->bindParam(':table', TABLE_USER, PDO::PARAM_STR);
    $query->bindParam(':username', $username, PDO::PARAM_STR);
    $query->execute();
    if ($query === false) {
        return false;
    } else {
        return $query;
    }
}
So, nun schaut alles aufgeräumter aus:
Code:
$users = getAllUsers();
if ($users === false) {
    echo 'There are no users registered.';
} else {
    while ($user = $users->fetch(PDO::FETCH_OBJ)) {
        echo $user->username;
    }
}

blackfin 6. Jul 2011 22:43

AW: [PHP, MySQL] Codedesign
 
Ich würde das auch so ähnlich wie shark beschrieben hat machen.
Alle Abfragen irgendwo sammeln ist nicht der richtige Weg.
Wenn du aber alles, was man irgendwie aus den Seiten extrahieren kann, in diese Getter / Setter-Funktionen auslagerst und sie in logische Gruppen / php-Dateien einordnest, die du evtl. auch noch dynamisch bei Gebrauch einbinden kannst, tust du dich im zweiten Schritt (irgendwann mal) auch leichter, das ganze in Klassen zu kapseln, wie es die grossen Frameworks wie Zend oder Symfony machen.

Generell kann man sich so ein MVC-ähnliches System auch ohne OOP zusammenbauen und im zweiten Schritt dann in OOP transferieren.

Luckie 6. Jul 2011 22:46

AW: [PHP, MySQL] Codedesign
 
Na ja, ich lasse das jetzt erst mal ruhen. Ich habe das was ich will und es ist ja nur für mich. Den Code wird niemand anders zu sehen bekommen.

Valle 7. Jul 2011 11:02

AW: [PHP, MySQL] Codedesign
 
Hallo Luckie,

willst du deinen Code schöner machen, vor allem auch hinsichtlich SQL, dann ist Zentralisierung mit Sicherheit der falsche Weg. Allerdings gilt auch hier das gleiche, wie ich schon in diesem Thread schrieb.

Natürlich ist das anfangs (!) etwas mehr Aufwand. Aber es lohnt sich und macht Spaß. Also mein Vorschlag: Lass Code Code sein und versuche es im nächsten Projekt mal mit einem der genannten Frameworks. In der DP sind genügend Leute die dir damit helfen können. :)

Liebe Grüße,
Valentin


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz