Ankündigung

Einklappen
Keine Ankündigung bisher.

Simple PHP / MySQL Klasse

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Scriptangebot Simple PHP / MySQL Klasse

    Servus Zusammen,

    ich persönlich bin nicht der größte Fan von Frameworks wie Laravel, Zend usw.. das hat verschiedene Gründe, aber das ist nicht die Plattform um darüber zu diskutieren - v.a. finde ich Frameworks nicht grundsätzlich und nicht immer schlecht bzw. gut - kommt immer auf die Situation an.

    Für kleinere Geschichten, Miniprojekte etc. habe ich ein eigenes Mini-Framework, das aus verschiedenen Klassensammlungen etc. besteht.

    Diese Klassen werden immernoch erweitert, wenn es oft wiederkehrende Fälle gibt.

    Lange Rede kurzer Sinn - für alle die sich bei Datenbankabfragen gerne etwas Zeit sparen möchten, jedoch nicht vollkommen die Syntax verändert wollen:

    PHP-Code:
    class dbo {
        private 
    $connection;
        
    //Bisher erfolgt bei mir Logging noch anderweitig - könnt es natürlich selber gerne einbauen.
        
    private $logging 0;
        
        function 
    __construct() {
            
    // Ich habe diese Variablen ausgelagert. Das könnt ihr natürlich handhaben wie ihr wollt, oder sie hier selber setzen.
            
    global $db_server;
            global 
    $db_user;
            global 
    $db_pass;
            global 
    $db_name;
            
    $this->connection mysqli_connect($db_server$db_user$db_pass) or die ("Keine Verbindung zum SQL-Server");
            
    mysqli_select_db($this->connection$db_name) or die ("Gewünschte Datenbank nicht verfügbar");
        }
        
        function 
    count($string) {
            
    $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
            return 
    mysqli_num_rows($qry);
        }
        
        function 
    query($string) {
            
    $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
            return 
    $qry;
        }

        function 
    select_array($string) {
            
    $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
            
    $result = array();
            while (
    $rows mysqli_fetch_array($qry)) {
                
    $result[] = $rows;
            }
            return 
    $result;
        }
        
        function 
    select_assoc($string) {
            
    $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
            
    $result = array();
            while (
    $rows mysqli_fetch_assoc($qry)) {
                
    $result[] = $rows;
            }
            return 
    $result;
        }

        function 
    select_row($string) {
            
    $qry $this->select_array($string);
            if (!empty(
    $qry)) {
            
    $res $qry[0];}
            else {return 
    false;}
            return 
    $res;
        }

        function 
    update($string) {
            
    $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
        }
        
        function 
    insert($string) {
            
    $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
            return 
    mysqli_insert_id($this->connection);
        }

        function 
    select_col($string) {
            
    $qry $this->select_row($string);
            
    $res $qry[0];
            return 
    $res;
        }

        function 
    save($table$values$where) {
            
    // $table = Tabellenname
            // $values = Array mit Feldname -> Wert (Wert wird escaped)
            // $where = Bedingung ohne WHERE, z.B. 'id = 1'
            // Anwendungsbeispiel - <form> mit <input name="db[feldname]"> und dann $_POST['db'] übergeben. Vorsicht! Feldnamen könnten
            // manipuliert werden. Sicherheitslücke.
            // Todo: Ggf. zweites Sicherheitsarray anbieten, das mit Feldnamen verglichen wird und manuell bestückt werden muss.

            
    $sql 'UPDATE '.$table.' SET ';
            
    $len count($values);
            
    $i 0;
            foreach (
    $values as $key => $value) {
                
    $i++;
                
    $sql .= $key." = '".mysql_real_escape_string($value)."'";
                if (
    $i $len) {$sql .= ', ';}
            }
            
    $sql .= ' WHERE '.$where;
            
    $this->update($sql);
        }
        
        function 
    __destruct() {
            
    mysqli_close($this->connection);
        }

    }

    ?> 
    Installation:
    In einer separaten Datei settings / config oder sonstwie habe ich die Variablen, die für die function __construct benötigt werden. Ihr könnt das natürlich abändern, wenn ihr nur diese Klasse verwenden möchtet. Aus Gründen den Bequemlichkeit habe ich die Konstanten aller Klassen in einer Datei zusammengefasst.

    Verwendung:
    PHP-Code:
    $qry = new dbo;

    // Eine Beispiel-Query
    $sql "SELECT * FROM table"

    $result $qry->select_array($sql);
    // gibt ein Array zurück (mysqli_fetch_array)

    $result $qry->select_assoc($sql);
    // s.o. - nur assoziatives Array (mysqli_fetch_assoc)

    $result $qry->select_row($sql);
    // ist nicht ganz wie mysqli_fetch_row - es ist die erste Zeile von mysqli_fetch_array - ganz einfach, damit ich auf die Feldnamen auch mit $result['feldname'] anstatt $result[0] zugreifen kann (gut, wenn sich die query ändert)

    $qry->query($sql);
    // Führt einfach die query aus

    $result $qry->count($sql);
    // Gibt die Anzahl Zeilen zurück

    $result $qry->update($sql);
    //Macht eigentlich das gleiche wir $qry->query($sql) - nur besser zum lesen später.

    $result $qry->insert($sql);
    // Gibt die mysqli_insert_id der eingefügten Zeile zurück

    $result $qry->select_col("SELECT name FROM table WHERE id = 1");
    // Gibt direkt den Inhalt des Feldes zurück.

    $qry->save($table$values$where);
    // Scheint eventuell seltsam und siehe Kommentare - nicht sicher, aber praktisch :) 
    // $table = Tabellenname
    // $values = Array (feldname => zu_speichernder_inhalt)
    // $where = "id = 1"
    // Wird genutzt, um z.B. einzelne Zeilen zu bearbeiten, aus Formularen. 
    Ihr könnt es nutzen, auseinandernehmen und v.a. und gerne kritisieren und verbessern, wenn ihr es für total schrecklich haltet.

    Liebe Grüße

    Max


  • #2
    PHP-Code:
            global $db_server
            global 
    $db_user
            global 
    $db_pass
            global 
    $db_name


    PHP-Code:
     or die(mysqli_error($this->connection)); 
    Nicht wirklich für den Produktiveinsatz geeignet.

    Da greif ich doch lieber zu PDO...
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Die Klasse ist technologischer Müll und auf dem Stand von PHP 4. Alleine PHPActiveRecord macht mehr Sinn als diese Klasse.
      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

      Kommentar


      • #4
        Mittendrinne kommt auch einmal

        PHP-Code:
        mysql_real_escape_string 
        vor. Hat das einen Sinn?

        Kommentar


        • #5
          Zitat von chiller20000 Beitrag anzeigen
          Mittendrinne kommt auch einmal

          PHP-Code:
          mysql_real_escape_string 
          vor. Hat das einen Sinn?
          Sicherheit geht vor?
          Er will damit einfach die SQL-Injections verhindern.

          Kommentar


          • #6
            Zitat von Yannici Beitrag anzeigen
            Sicherheit geht vor?
            Er will damit einfach die SQL-Injections verhindern.
            mysqli_ mysql_ fällt dir was auf?
            Zitat von nikosch
            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

            Kommentar


            • #7
              Zitat von Yannici Beitrag anzeigen
              Sicherheit geht vor?
              Er will damit einfach die SQL-Injections verhindern.
              Schau genau, das ist ein Fehler in der Klasse

              mysql_ != mysqli_

              PHP-Code:
              mysqli_connect(...) 
              PHP-Code:
              mysql_real_escape_string(...) 
              Das ist ja schon freaky...
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Zitat von hausl Beitrag anzeigen
                Schau genau, das ist ein Fehler in der Klasse

                mysql_ != mysqli_


                Das ist ja schon freaky...
                Wuahh ... so genau hab ich gar nicht hingeschaut
                Na dann ist das ja was völlig anderes ... gruselig.

                Kommentar


                • #9
                  An Produkten mit dieser Codequalität gefällt mir am besten immer der einleitende Framework-Rant.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    An Produkten mit dieser Codequalität gefällt mir am besten immer der einleitende Framework-Rant.
                    Jau, Tip-Top

                    Und gleich nach der "ich mag keine Frameworks" Einleitung folgt der Satz "deswegen habe ich mir hier dieses Super-duper-Mini-Framework gebastelt"
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar


                    • #11
                      Und das jetzt noch in der Scriptbörse...
                      DAS gehört ins Anfängerforum.
                      Standards - Best Practices - AwesomePHP - Guideline für WebApps

                      Kommentar


                      • #12
                        Zitat von mtedv Beitrag anzeigen
                        PHP-Code:
                        class dbo {
                            private 
                        $connection;
                            
                        //Bisher erfolgt bei mir Logging noch anderweitig - könnt es natürlich selber gerne einbauen.
                            
                        private $logging 0;
                            
                            function 
                        __construct() {
                                
                        // Ich habe diese Variablen ausgelagert. Das könnt ihr natürlich handhaben wie ihr wollt, oder sie hier selber setzen.
                                
                        global $db_server;
                                global 
                        $db_user;
                                global 
                        $db_pass;
                                global 
                        $db_name;
                                
                        $this->connection mysqli_connect($db_server$db_user$db_pass) or die ("Keine Verbindung zum SQL-Server");
                                
                        mysqli_select_db($this->connection$db_name) or die ("Gew&uuml;nschte Datenbank nicht verf&uuml;gbar");
                            }
                            
                            function 
                        count($string) {
                                
                        $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
                                return 
                        mysqli_num_rows($qry);
                            }
                            
                            function 
                        query($string) {
                                
                        $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
                                return 
                        $qry;
                            }

                            function 
                        select_array($string) {
                                
                        $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
                                
                        $result = array();
                                while (
                        $rows mysqli_fetch_array($qry)) {
                                    
                        $result[] = $rows;
                                }
                                return 
                        $result;
                            }
                            
                            function 
                        select_assoc($string) {
                                
                        $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
                                
                        $result = array();
                                while (
                        $rows mysqli_fetch_assoc($qry)) {
                                    
                        $result[] = $rows;
                                }
                                return 
                        $result;
                            }

                            function 
                        select_row($string) {
                                
                        $qry $this->select_array($string);
                                if (!empty(
                        $qry)) {
                                
                        $res $qry[0];}
                                else {return 
                        false;}
                                return 
                        $res;
                            }

                            function 
                        update($string) {
                                
                        $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
                            }
                            
                            function 
                        insert($string) {
                                
                        $qry mysqli_query($this->connection$string) or die(mysqli_error($this->connection));
                                return 
                        mysqli_insert_id($this->connection);
                            }

                            function 
                        select_col($string) {
                                
                        $qry $this->select_row($string);
                                
                        $res $qry[0];
                                return 
                        $res;
                            }

                            function 
                        save($table$values$where) {
                                
                        // $table = Tabellenname
                                // $values = Array mit Feldname -> Wert (Wert wird escaped)
                                // $where = Bedingung ohne WHERE, z.B. 'id = 1'
                                // Anwendungsbeispiel - <form> mit <input name="db[feldname]"> und dann $_POST['db'] übergeben. Vorsicht! Feldnamen könnten
                                // manipuliert werden. Sicherheitslücke.
                                // Todo: Ggf. zweites Sicherheitsarray anbieten, das mit Feldnamen verglichen wird und manuell bestückt werden muss.

                                
                        $sql 'UPDATE '.$table.' SET ';
                                
                        $len count($values);
                                
                        $i 0;
                                foreach (
                        $values as $key => $value) {
                                    
                        $i++;
                                    
                        $sql .= $key." = '".mysql_real_escape_string($value)."'";
                                    if (
                        $i $len) {$sql .= ', ';}
                                }
                                
                        $sql .= ' WHERE '.$where;
                                
                        $this->update($sql);
                            }
                            
                            function 
                        __destruct() {
                                
                        mysqli_close($this->connection);
                            }

                        }

                        ?> 
                        Kleiner morgendlicher Frühsport. ( ist im Browser zusammengetippt )

                        PHP-Code:
                        <?php

                        class MySQL {
                            
                            private 
                        $link;
                            
                            public function 
                        __construct($database$username$password$hostname 'localhost'$port 3308)
                            {
                                
                        $this->link = new PDO(
                                    
                        sprintf(
                                        
                        'mysql:host=%s;dbname=%s;port=%s;charset=utf8',
                                        
                        $hostname,
                                        
                        $database,
                                        
                        $port
                                    
                        ),
                                    
                        $username,
                                    
                        $password,
                                    array(
                                        
                        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                                        
                        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
                                    )
                                );
                            }
                            
                            public function 
                        receive($string, array $bindings = array(), $mode PDO::FETCH_ASSOC)
                            {        
                                
                        $statement $this->bind($this->link->prepare($string), $bindings);
                                
                        $statement->execute();
                                
                                return 
                        $statement->fetchAll($mode);
                            }
                            
                            public function 
                        create($string, array $bindings = array())
                            {
                                
                        $statement $this->bind($this->link->prepare($string), $bindings);
                                
                        $statement->execute();
                                return 
                        $this->link->lastInsertId();
                            }
                            
                            public function 
                        update($string, array $bindings = array()) 
                            {
                                
                        $statement $this->bind($this->link->prepare($string), $bindings);
                                
                        $statement->execute();
                                return 
                        $statement->rowCount();
                            }
                            
                            public function 
                        delete($string, array $bindings = array())
                            {
                                
                        $statement $this->bind($this->link->prepare($string), $bindings);
                                
                        $statement->execute();
                                
                                return 
                        $statement->rowCount() > 0;
                            }
                            
                            protected function 
                        guessPDOType($value)
                            {
                                if ( 
                        is_string($value) && is_numeric($value) ) {
                                    if ( (int) 
                        $value == (float) $value ) {
                                        return 
                        PDO::PARAM_INT;
                                    }
                                }
                                else if ( 
                        is_bool($value) ) {
                                    return 
                        PDO::PARAM_BOOL;
                                }
                                else if ( 
                        is_null($value) ) {
                                    return 
                        PDO::PARAM_NULL;
                                }
                                
                                return 
                        PDO::PARAM_STR;
                            }
                            
                            protected function 
                        bind(PDOStatement $statement, array $bindings)
                            {
                                foreach ( 
                        $bindings as $key => $value ) {
                                    
                        $statement->bindValue($key$value$this->guessPDOType($value));
                                }
                                
                                return 
                        $statement;
                            }
                            
                        }
                        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                        Kommentar

                        Lädt...
                        X