Homepage CGI/Perl Scripte PHP Scripte Artikel CGI-Perl Workshop SELFHTML SELFPHP Linkdatenbank Grafikdownloads
Inspire-World Forum  
Zurück   Inspire-World Forum > PHP und MYSQL Datenbanken > PHP und MySQL

Antwort
 
Themen-Optionen Ansicht
Alt 02.08.2010, 19:13   #16
litterauspirna
Registrierter Benutzer
Board-Member
 
Registriert seit: 02.2008
Beiträge: 372
Standard AW: DB-Class Helmut

Hallo ihr Leutz,

ich will ja nicht meckern, aber ich lese die ganze Zeit run_insert_query oder run_update_query, das ist meiner Meinung nach aber alles nicht im Sinne der OOP. (Helmut bitte nicht böse sein, das ist nur eine kleine Kritik). Ich kenne die Klasse vom kurz drüber lesen aus dem Bildhosting Script und die gefällt mir so gar nicht.

Ich bin der Meinung das muss getrennt werden, bzw. in 2 Klassen vernünfitg aufgeteil werden um auch einen vernünftigen Softwaredesign entgegen zu kommen. Es gibt nur einen Query der an die DB geschickt wird und der handelt das Statement ab, von daher sind die Methoden run_insert_query und run_update_query im Prinzip her so von null Mehrwert gezeugt.

Eine Methode Query reicht vollkommen aus.

Die bessere Variante wäre Helmut wenn du eine 2 Klasse machst meinetwegen CreateSqlStatementClass.php und da in dieser Klasse die Methoden erstellst die Statements aller Art also Select, Insert Into, Update, Delete ausführen, da muss man dann natürlich auch darauf achten das man es nicht übertreibt, aber das wäre eine elegantere Lösung.

Ich entwickel meine Mysql Klasse auch immer weiter und momentan eine Login Script auf OOP Basis mit ein wenig zusätzlichen Kram noch und habe da allein mittlerweile inklusive DB Klasse glaub 8 Klassen, die ihren Sinn haben.

In der OOP ist es wichtig vom prozeduralen denken wegzukommen (dabei hatte und habe ich teilweise noch Probleme). Eine Klasse sollte eine Aufgabe haben, (eine Aufgabe heist nicht eine Methode).

Zumal sowie ich den Code lesen konnte ist die Klasse noch auf Basis von PHP4, ich würde das auf PHP5 umstellen und mir die Vorteile zu nutze machen die sich da auftun.

Ich hoffe ihr redet jetzt nach der Kritik noch mit mir.

Mfg litter
__________________
Taugenichtse die was haben,haben etwas gegen habenichtse die was taugen!

Meine Seite http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 06.08.2010, 21:50   #17
Steffen
Registrierter Benutzer
Senior Anwärter
 
Benutzerbild von Steffen
 
Registriert seit: 11.2001
Ort: Neustrelitz
Beiträge: 1.562
Standard AW: DB-Class Helmut

Hi,

hab ich grad auf devshed.com gefunden, meinst du sowas.

Creating a MySQL Abstraction Layer with Bridge Classes in PHP 5

So richtig seh ich da noch nicht durch, mein English ist leider sehr schlecht. Was ich auch nicht weiß, ob das so gut ist. Ich bin da ja Laie, vielleicht kann das ja mal einer testen oder mehr dazu sagen der Ahnung hat.

Ich hab den Code mal vernünftig formatiert...

PHP-Code:
// define 'MySQL' class
class MySQL 
{
    
public function __construct($host,$user,$password,$database
    {
        
        if(!
$conId=mysql_connect($host,$user,$password)) 
        {
            
throw new Exception('Error connecting to the server');
        }
        
        if(!
mysql_select_db($database,$conId)) 
        {
            
throw new Exception('Error selecting database');
        }
    
    }

    
// run query
    
public function query($query
    {

        if(!
$this->result=mysql_query($query)) 
        {
            
throw new Exception('Error performing query '.$query);
        }
        
        return new 
Result($this,$this->result);
    }
// END MySQL class

########################################

// define 'Result' class
class Result 
{
    
private $mysql;
    
private $result;

    
public function __construct(&$mysql,$result
    {
        
$this->mysql=&$mysql;
        
$this->result=$result;
    }

    
// fetch row
    
public function fetch_array() 
    {
        return 
mysql_fetch_assoc($this->result);
    }

    
// count rows
    
public function countRows() 
    {
        
        if(!
$rows=mysql_num_rows($this->result)) 
        {
            
throw new Exception('Error counting rows');
        }

        return 
$rows;
    }

    
// count affected rows
    
public function countAffectedRows() 
    {

        if(!
$rows=mysql_affected_rows($this->mysql->conId)) 
        {
            
throw new Exception('Error counting affected rows');
        }

        return 
$rows;
    }

    
// get ID form last-inserted row
    
public function getInsertID() 
    {

        if(!
$id=mysql_insert_id($this->mysql->conId)) 
        {
            
throw new Exception('Error getting ID');
        }

        return 
$id;
    }

    
// seek row
    
public function seekRow($row=0
    {

        if(!
is_int($row)||$row<0
        {
            
throw new Exception('Invalid result set offset');
        }

        if(!
mysql_data_seek($this->result,$row)) 
        {
            
throw new Exception('Error seeking data');
        }

    }

// END Result class

########################################

// define 'BridgeMySQLConnector' class

class BridgeMySQLConnector 
{

    
private $conInterface;
    
private $db;

    
public function __construct($host,$user,$password,$database,$conInterface
    {

        if(
$conInterface!='mysql' && $conInterface!='mysqli'
        {
            
throw new Exception('Invalid connection interface for MySQL'); 
        }

        if(
$conInterface=='mysql'
        {
            
$this->db=new MySQL($host,$user,$password,$database);
        } 
        else 
        {
            
$this->db=new mysqli($host,$user,$password,$database);
        }

    }

    
public function query($query
    {
        return 
$this->db->query($query); 
    }

// END BridgeMySQLConnector class 
Im Einsatz dann so:

PHP-Code:
// example using the 'MySQL' class
try {
    
// instantiate 'BridgeMySQLConnector' class
    // connect to MySQL using 'MySQL' wrapping class
    
$bmysqlcon=new BridgeMySQLConnector('host','user','password','database','mysql');
    
    
// run query using 'MySQL' wrapping class
    
$bmysqlcon->query('SELECT * FROM users');
}
catch(Exception $e) {
    echo 
$e->getMessage();
    exit();
}

try {
    
// example using the 'mysqli' extension
    // connect to MySQL using 'mysqli' library
    
$bmysqlcon=new BridgeMySQLConnector('host','user','password','database','mysqli');
    
    
// run query using 'mysqli' library
    
$bmysqlcon->query('SELECT * FROM users');
}
catch(Exception $e) {
    echo 
$e->getMessage();
    exit();

__________________
Mfg Steffen

Steinchenspiel mach mit - mach's besser
Steffen ist offline   Mit Zitat antworten
Alt 07.08.2010, 15:04   #18
Helmut
Moderator
 
Benutzerbild von Helmut
 
Registriert seit: 04.2001
Ort: Brand-Erbisdorf
Beiträge: 24.130
Standard AW: DB-Class Helmut

@litterauspirna,

Zitat:
Zumal sowie ich den Code lesen konnte ist die Klasse noch auf Basis von PHP4, ich würde das auf PHP5 umstellen und mir die Vorteile zu nutze machen die sich da auftun.
klar, wenn jeder PHP 5 zur Verfügung hätte würd ich auch manches anders machen. Wenn Du aber mal Scripte für Kunden schreibst möchten die auf einer recht breiten PHP Versionsbasis laufen. Da kann man nicht immer einfach sagen "wechsel den Hoster..." Strato hat z.B. noch solche Uralt Versionen am Start PHP Version knapp über der 4

Bei Scriptspachen ist das ja nicht so einfach wie bei den alten Browsern die CSS nicht so recht verstehen, da gibts eine Fehlermeldung und vorbei ists mit der Freude...

Ansonsten ist das mit dem Coden immer so eine Sache, jeder entwickelt/hat seine Vorlieben. Ich steh da aber auch auf dem Standpunkt Classen sind nicht alles, funktionieren muss es und sicher sollte es sein.

Cu Helmut
__________________
[Nur wer selber mal probiert lernt auch dazu]
Helmut ist offline   Mit Zitat antworten
Alt 07.08.2010, 17:15   #19
litterauspirna
Registrierter Benutzer
Board-Member
 
Registriert seit: 02.2008
Beiträge: 372
Standard AW: DB-Class Helmut

Zitat:
Zitat von Helmut Beitrag anzeigen
@litterauspirna,

klar, wenn jeder PHP 5 zur Verfügung hätte würd ich auch manches anders machen. Wenn Du aber mal Scripte für Kunden schreibst möchten die auf einer recht breiten PHP Versionsbasis laufen. Da kann man nicht immer einfach sagen "wechsel den Hoster..." Strato hat z.B. noch solche Uralt Versionen am Start PHP Version knapp über der 4

Bei Scriptspachen ist das ja nicht so einfach wie bei den alten Browsern die CSS nicht so recht verstehen, da gibts eine Fehlermeldung und vorbei ists mit der Freude...

Ansonsten ist das mit dem Coden immer so eine Sache, jeder entwickelt/hat seine Vorlieben. Ich steh da aber auch auf dem Standpunkt Classen sind nicht alles, funktionieren muss es und sicher sollte es sein.

Cu Helmut
Nunja bei Strato kannst du aber die PHP Version via .htaccess ändern bzw. rauf setzen.

Stimmt jeder entwickelt so wie er es für richtig hält, was aber nur solange gilt wie man allein und nicht im Team arbeitet.

Stimmt Klassen sind nicht alles und es ist auch nicht gleich OOP nur wenn man Klassen einsetzt, ich habe schon "OOP" gesehen da war Code nur irgendwie in Klassen gepresst und hatte aber im eigentlichen Sinn mit OOP rein gar nichts am Hut.

Man sollte Klassen entwickeln und dabei seinen Mehrwert davon haben. Ich habe mir zum Beispiel eine Login Klasse geschrieben die nicht SQL Statement abhängig ist, dass heist in der Klasse gibt es keinen Statement String, sondern der wir an eine Methode gegeben und weiter Klassenintern verarbeitet bis es ne Ausgabe bzw. nach ausen gewollte Verarbeitung gibt.

Ich habe mir auch ne Filehandlingklasse geschrieben wo ich mit allmöglichen Datein kommunizieren kann etc., das sind dann eben die Vorteile der OOP, der Mehrwert halt, ich muss nicht immer wieder mal im Manual schauen was macht nun genau fopen, oder fputs oder file_get_contents, nein ich gucke in meine Klasse holor mir meine Methode dafür übergebe ein paar Parameter und fertsch is dor Kram. So habe ich einen efecktiven Mehrwert geschaffen.

Ok aber ich glaube das artet grad zu weit aus, obwohl ich diese Diskussion gut finde.
__________________
Taugenichtse die was haben,haben etwas gegen habenichtse die was taugen!

Meine Seite http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 07.08.2010, 18:05   #20
Helmut
Moderator
 
Benutzerbild von Helmut
 
Registriert seit: 04.2001
Ort: Brand-Erbisdorf
Beiträge: 24.130
Standard AW: DB-Class Helmut

Zitat:
Stimmt jeder entwickelt so wie er es für richtig hält, was aber nur solange gilt wie man allein und nicht im Team arbeitet.
nun da gibt es eh immer Coderichtlinien, das hat aber mit den Classen auch noch nichts direkt zu tun. Da ist eher die Absprache untereinander wichtig. Denn was nützt es dem Kollegen wenn ich was entwerfe was der so garnicht braucht.

Wenn der aber weiss das er z.B. ein DB Insert so und so schreiben muss steht der Teamarbit auch nix im Wege.

Ich hab mir ja bei run_insert_query oder run_update_query auch was dabei gedacht. So findet man nämlich sehr schnell bestimmte Queryarten, wenn man eine DB Tabelle aktualisiert und dann den Code anpassen muss ist sowas sehr nützlich. Je nach verwendetem Editor und Suchen/ersetzen Features kann man das zumindest gut brauchen.

Cu Helmut
__________________
[Nur wer selber mal probiert lernt auch dazu]
Helmut ist offline   Mit Zitat antworten
Alt 08.08.2010, 07:16   #21
litterauspirna
Registrierter Benutzer
Board-Member
 
Registriert seit: 02.2008
Beiträge: 372
Standard AW: DB-Class Helmut

Zitat:
Zitat von Helmut Beitrag anzeigen
nun da gibt es eh immer Coderichtlinien, das hat aber mit den Classen auch noch nichts direkt zu tun. Da ist eher die Absprache untereinander wichtig. Denn was nützt es dem Kollegen wenn ich was entwerfe was der so garnicht braucht.

Wenn der aber weiss das er z.B. ein DB Insert so und so schreiben muss steht der Teamarbit auch nix im Wege.
Naja ganz so einfach ist das auch nicht, richtig ist das Teams sich eine grundliegenden Codestandart festlegen nachdem sich alle halten sollen. Aber ein Team legt noch ganz andere Sachen fest wie z.B., wird OOP programmiert oder strukturiert, welches / welche Design Patterns (Entwurfsmuster) werden benutzt. Das sind mal nur 2 kleine beispiele. Es geht ja dann weiter wer macht das ERM, wer die User Case Diagramme, wer die Klassendiagramm und und und. Also da steckt schon sehr viel mehr dahinter wenns um Teamarbeit geht.

Zitat:
Zitat von Helmut Beitrag anzeigen
Ich hab mir ja bei run_insert_query oder run_update_query auch was dabei gedacht. So findet man nämlich sehr schnell bestimmte Queryarten, wenn man eine DB Tabelle aktualisiert und dann den Code anpassen muss ist sowas sehr nützlich. Je nach verwendetem Editor und Suchen/ersetzen Features kann man das zumindest gut brauchen.

Cu Helmut
Ja davon gehe ich aus das ein erfahrener Programmierer wie du sich dabei was denkt, sonst wäre der Code sich nicht entstanden, nur mir fehlt da der Mehrwert dabei, denn ein Query ist ein Query und macht immer das selbe, nämlich Daten aus einen Statement an die DB zur Verarbeitung schicken, nicht mehr und nicht weniger. Anders ist das dann z.B. mit einer Fetch Methode, da hast du dann so Sachen wie assoc, array, row, object.

Mal ein Auszug aus meiner Methode.

PHP-Code:
/*
    *
    *    fetch auf die datenbank setzen
    *    @param $query / vorherabgesandter Query an die datenbank
    *    @param $fetchSwitch / auswahl welcher typ eines fetches gewählt wird
    *
    */
    
public function dbFetch($query$fetchSwitch){
        
        switch(
$fetchSwitch){
            
            case 
'assoc':
                
$this->_fetch mysql_fetch_assoc($query);
            break;

            case 
'array':
                
$this->_fetch mysql_fetch_array($query);
            break;

            case 
'row':
                
$this->_fetch mysql_fetch_row($query);
            break;

            case 
'object':
                
$this->_fetch mysql_fetch_object($query);
            break;
        }

        return 
$this->_fetch;        

    } 
Und so sieht das dann im Einsatz aus.

PHP-Code:
$_logQuery $this->db->dbQuery($this->_selectUser);
$_logFetch $this->db->dbFetch($_logQuery"assoc"); 
Denn im Query ist ja nur wichtig was im Statement steht, da ist es meiner Meinung nach unnötig verschiedene Methoden zu schreiben.

Gruß litter
__________________
Taugenichtse die was haben,haben etwas gegen habenichtse die was taugen!

Meine Seite http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 08.08.2010, 12:24   #22
Spider
Registrierter Benutzer
eLiTe mEmBeR
 
Benutzerbild von Spider
 
Registriert seit: 06.2001
Ort: Vogtland
Beiträge: 6.111
Standard AW: DB-Class Helmut

Zitat:
Zitat von litterauspirna Beitrag anzeigen
Denn im Query ist ja nur wichtig was im Statement steht, da ist es meiner Meinung nach unnötig verschiedene Methoden zu schreiben.
Na das ist jetzt aber schon wieder Grundsatz Diskussion.
Ich bin der Meinung das weniger der Weg das Ziel ist, sondern eben das Ziel.
Ob ich das durch eine Funktion lösen und das dann mit IF oder SWITCH aufdrösen was nun zurück gegeben wird, oder ob ich das 4 Einzelfunktionen mache ist m.M. nach völlig egal.

OOP, oder allgemein gute Programmierung, bedeutet ja nicht das ähnliche Funktionen in einer Funktion zusammen zufassen sind.
Spider ist offline   Mit Zitat antworten
Alt 08.08.2010, 15:03   #23
litterauspirna
Registrierter Benutzer
Board-Member
 
Registriert seit: 02.2008
Beiträge: 372
Standard AW: DB-Class Helmut

Zitat:
Zitat von Spider Beitrag anzeigen
Na das ist jetzt aber schon wieder Grundsatz Diskussion.
Ich bin der Meinung das weniger der Weg das Ziel ist, sondern eben das Ziel.
Ob ich das durch eine Funktion lösen und das dann mit IF oder SWITCH aufdrösen was nun zurück gegeben wird, oder ob ich das 4 Einzelfunktionen mache ist m.M. nach völlig egal.

OOP, oder allgemein gute Programmierung, bedeutet ja nicht das ähnliche Funktionen in einer Funktion zusammen zufassen sind.
Nee nee Spider, ich glaube du hast mich da einfach nur falsch verstanden. Es soll ja hier nicht um eine Grundsatzdiskussion gehen oder OOP gut oder nicht gut.

Es soll hier um den Mehrwert einer Klasse bzw. derer Methoden gehen. Und das war das was ich an Helmuts Klasse eben nicht so finden kann. Das mit dem Query war ein Beipiel was eben keinen Mehrwert bietet. Weil scheis egal ob ich ein Select, Insert Into, Update oder Delete Statement habe, mysql_query muss ich auf alle diese Sachen anwenden, was wiederum heist query bleibt query der wird immer gesendet, dass Statement ist hierbei der unterschied. Von daher sagte ich, dass es keinen Mehrwert bringt da 2 oder 3 oder 4 Query Methoden zu schreiben die eben nur ein anders Statement abhandeln.

Darum brachte ich das Beispiel mit der fetch Methode. Na klar ist das vollkommen Rille ob ich die Auswertung mit einem If/ELSEIF/ELSE oder Switch Kontrollkonstrukt löse. Nur für jeden Typ eines Fetches zum Beispiel eine extra Methode zu schreiben bringt a) keinen Mehrwert und b) einfach zu viel Sinnlosen Overhead, von daher fasse ich das in einer Methode in einem Switch Konstrukt zusammen, weil das hier in dem beispiel auch einfach sicherer ist.

Um Grundsatz oder nicht soll es hier nicht gehen, ehrlich nicht, aber ich finde eine Diskussion um einen Mehrwert des Einsatzes einer Klasse schon nicht verkehrt, denn es ist eine fachliche Diskussion und User wie vieleicht Steffen oder andere die ins Thema einsteigen, können aus dieser Diskussion wenn sie die lesen auch etwas dazu lernen.

Ich ahbe auch von hier und aus anderen Foren viel durch Diskussionen dazu gelernt und genau deshalb weil ich auch geiwsse Sachen für mich entwickelt habe die mir nun einen unheimlichen Mehrwert bringen, kann ich nun auch anders mitdiskutieren bei solchen Themen. Und ich bin froh das auch ich mein Wissen mit anderen teilen kann.

Gruß Litter
__________________
Taugenichtse die was haben,haben etwas gegen habenichtse die was taugen!

Meine Seite http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CSS / Class befehl auswählen Kawalle CSS-Stylesheets 1 24.02.2006 20:34
CSS & Class kingrama CSS-Stylesheets 24 29.11.2005 15:06
linksfarbe in class tiedemaennchen CSS-Stylesheets 1 14.09.2005 23:37
@ Helmut / dissolvemenu.class Data HTML und Javascript 6 18.12.2001 17:39
Bearbeiten von*.class Dateien??? TKP HTML und Javascript 2 26.08.2001 19:10


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:38 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.