Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Abfrage in einer Klasse

Einklappen

Neue Werbung 2019

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

  • MySQL Abfrage in einer Klasse

    Moin moin allerseits!

    Ich habe ein kleines Problem und zwar bin ich gerade dabei eine Klasse zu schreiben. Diese ist als einziges in einer einzelnen PHP Datei und wird mittels include da eingebunden, wo sie gebraucht wird.

    Normalerweise habe ich bisher immer meine mysql-db-connect.php aufgerufen, diese enthält folgenden code:
    PHP-Code:
    $mysqli = new mysqli("127.0.0.1""meinName""meinPasswort""Datenbank");

    if (
    mysqli_connect_errno()) {
        
    printf("Connect failed: %s\n"mysqli_connect_error());
        exit();

    Ich verwende manchmal dann danach
    PHP-Code:
    $mysqli->real_escape_string(); 
    bzw. mache mysql-abfrragen, z.B. so:
    PHP-Code:
    $mysqli->query("SELECT * from Tabelle"); 
    .

    Allerdings reicht es ja nicht, diese Datei einzubinden, bevor ich die klasse einbinde - genausowenig bringt mir das was, den Inhalt der mysql-db-connect.php in die klasse zu schreiben. Das ist mir schon klar.
    Nur, wie kann ich denn jetzt real_escape_string bzw. mysql(i) abfragen in dieser funktion (welche sich ja in der klasse befindet) verwenden???

    Nur nochmal zum besserem Verständnis, was ich will, hier Beispielcode:

    PHP-Code:
    class meineKlasse{
        private 
    $irgendwas

        
    function speichere_irgendwas($irgendetwas){
            
    $this->irgendwas $mysqli->real_escape_string($irgendetwas);
            
    //Nun möchte ich $this->irgendwas in einer Datenbank speichern, z.B. so:
            
    $query "INSERT INTO Tabelle VALUES ('".$this->irgendwas."')";
            
    $ergebnis $mysqli->query($query);
        }

    Ich hoffe ihr könnt mir helfen!


  • #2
    No offense aber dir fehlt es da noch sehr an den OOP-Grundlagen :P

    (Ich habe gerade leider keine Zeit auf dein Problem einzugehen.)

    Kommentar


    • #3
      Das schade, vielleicht jemand anders?
      Und ja, es stimmt, ich bin OOP-Anfänger, jedoch benötige ich dennoch dringend eine Lösung dafür

      EDIT: mal ne frage, woran kann man eigentlich erkennen, dass ich anfänger bin? nur aufgrunddessen, dass ich die antwort auf meine frage nicht kenne oder noch aufgrund anderer merkmale?

      Kommentar


      • #4
        PHP-Code:

        class mysql{

              public function 
        escape_string($string){

                    return 
        mysqli_real_escape_string($this->link$string);
              }
        }

        $db = new mysql();
        $rueckgabe $db->escape_string($string);
        echo 
        $rueckgabe
        So sollte das aussehen
        - Laravel

        Kommentar


        • #5
          so sollte was aussehen? das was ich machen möchte oder ist das ne korrektur von was anderem (ich hab da ja so eine ahnung)? weil das hilft mir so im moment nicht weiter...

          sorry, aber danke

          Kommentar


          • #6
            Übergib $db als Member in deine Klasse, Stichwort Dependency Injection

            Auf die Schnelle google:
            http://stackoverflow.com/questions/2...active#tab-top
            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


            • #7
              Hm, okay, werd mir das mal angucken...
              danke jedenfalls erstmal!

              edit: oh mein gott, sieht das kompliziert aus... ich hatte um ehrlich zu sein, auf eine einfachere lösung gehofft...

              Kommentar


              • #8
                Warum?

                PHP-Code:
                    public function __construct(mysqli $db)
                    {
                        
                $this->db $db;
                        
                // ...
                    

                Und dann kannst du in deiner Klasse wie auch "draussen" über
                PHP-Code:
                $this->db->query($query); 
                zugreifen.
                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


                • #9
                  Zitat von Ich2015Ich Beitrag anzeigen
                  Hm, okay, werd mir das mal angucken...
                  danke jedenfalls erstmal!

                  edit: oh mein gott, sieht das kompliziert aus... ich hatte um ehrlich zu sein, auf eine einfachere lösung gehofft...
                  Einfach ist Ansichtssache.

                  PHP-Code:
                  class ConcreteModel
                  {
                     protected 
                  $db;

                     public final function 
                  __construct(MySQLi $db)
                     {
                        
                  $this->db $db;
                     }

                     public function 
                  storeSomething($string)
                     {
                        
                  // ...
                     
                  }

                  [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


                  • #10
                    Um das mal mit Worten zu beschreiben: Du brauchst einfach nur das MySQLi-Objekt als Membervariable in deiner Klasse. Ob du dieses Objekt im Konstruktor initialisierst oder per Dependency Injection (das echt nur ein fancy word!) übergibst, ist dabei erstmal egal.

                    Kommentar


                    • #11
                      Zitat von Tropi Beitrag anzeigen
                      Um das mal mit Worten zu beschreiben: Du brauchst einfach nur das MySQLi-Objekt als Membervariable in deiner Klasse. Ob du dieses Objekt im Konstruktor initialisierst oder per Dependency Injection (das echt nur ein fancy word!) übergibst, ist dabei erstmal egal.
                      Ja, klingt echt nicht so kompliziert - ich neige gegen Abend immer dazu, mich nicht mehr wirklich konzentrieren zu können Ich glaub es ist das Beste wenn ich es mir morgen einfach nochmal angucke - es kommt noch dazu dass ich einen recht stressigen tag hatte - also bitte entschuldigt

                      Danke jedenfalls für die vielen und überraschend schnellen Antworten!

                      Kommentar


                      • #12
                        Hier noch mal zum Beispiel passender Code:

                        PHP-Code:
                        class meineKlasse {
                            protected 
                        mysqli;

                            public function 
                        __construct($mysqli
                            {
                                
                        $this->mysqli $mysqli;
                            }

                            function 
                        speichere_irgendwas($irgendetwas)
                            { 
                                
                        $this->mysqli->query("INSERT INTO tabelle VALUES($irgendwas)");
                            }

                        PHP-Code:
                        include "mysql.php";
                        include 
                        "meineKlasse.php";

                        $meineKlasse = new meineKlasse($mysqli);
                        $meineKlasse->speichere_irgendwas('blub'); 

                        Kommentar


                        • #13
                          Wenn du das jetzt noch vernünftig eingerückt hättest..
                          [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


                          • #14
                            Hab ich nun nachgeholt

                            Zitat von Ich2015Ich Beitrag anzeigen
                            EDIT: mal ne frage, woran kann man eigentlich erkennen, dass ich anfänger bin? nur aufgrunddessen, dass ich die antwort auf meine frage nicht kenne
                            Ja, daran habe ich es fest gemacht. Es gibt verschiedene Möglichkeiten dein Problem zu lösen und du kanntest keine davon. Daraus habe ich geschlossen, dass OOP für dich noch recht neu ist.

                            Eine Alternativlösung ist eine statische Klasse zu nutzen:
                            PHP-Code:
                            class MySqli {
                                protected static 
                            $mySqli;

                                public static function 
                            start()
                                {
                                    
                            self::$mySqli = new mysqli("localhost""my_user""my_password""world");
                                }

                                public static function 
                            query($statement)
                                {
                                    return 
                            self::$mySqli->query($statement);
                                }
                            }

                            include 
                            'mysqli.php';
                            MySqli::start();

                            class 
                            meineKlasse() {
                                function 
                            speichere_irgendwas($irgendetwas){ 
                                    
                            $query "INSERT INTO Tabelle VALUES ($irgendwas)";
                                    
                            $ergebnis MySqli::query($query); 
                                }

                            Wie du siehst ist es möglich auf die statische query-Methode der MySqli-Klasse innerhalb der meineKlasse-Klasse zuzugreifen. Es hat aber Vorteile das über Objektinstanzen zu machen - wie in den vorherigen Beispielen gezeigt wurde. Da dir die Idee aber nicht bekannt zu sein schien, war das für mich ein Indiz dafür, dass du vermutlich noch in der Lernphase bist.

                            Kommentar


                            • #15
                              joa dein static beispiel ist so der Gipfel des worst practice..
                              [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