Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbank class

Einklappen

Neue Werbung 2019

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

  • Datenbank class

    Hallo liebes Forum.
    Nach langer Zeit habe ich mich wieder dran gesetzt mich mit PHP zu beschäftigen und bin hier auf ein Fehler gestoßen. Ich habe schon etwas gegoogle't allerdings seh ich mein Fehler nicht ganz * *
    Meine Klasse
    PHP-Code:
    class datenbank
        
    {

                private 
    $connection Null;
                private 
    $result Null;
                private 
    $counter Null;


                    public function 
    __construct($host=NUll$user=NUll$pw=NUll)
                    {

                        if(
    $this->connection == Null)
                        {
                            
    $this->connection mysqli_connect($host$user$pw);
                        }
                        else
                        {
                            
    $this->connection mysql_connect($host$user$pw);
                        }

                    }

                    public function 
    db_auswahl($db)
                    {

                        if(
    $this->connection == true)
                        {
                            if(
    is_resource($this->connection))
                            
    mysqli_select_db($db$this->connection);
                        }
                        else
                        {
                            if(
    is_resource($this->connection))
                            
    mysql_select_db($db$this->connection);
                        }

                    }

                    public function 
    ausgeben($query)
                    {

                        
    $this->result mysqli_query($this->connection$query);
                        [
    B]$fetch_row mysqli_fetch_row($this->result);[/B]}
                        
    $this->counter NUll;
                    }

                    public function 
    schließe_db()
                    {
                        if(
    is_resource($this->connection))
                        {
                            
    mysqli_close($this->connection);
                        }
                    }


        } 
    und so rufe ich die Klasse auf
    PHP-Code:
        var_dump($db = new datenbank("host","user","Passwort")); 
    Hier stelle ich Die Verbindung zur Datenbank auf. Hier wird mir auch ein Array angezeigt, die Verbindung steht.
    PHP-Code:
        var_dump($db->db_auswahl("tutorial")); 
    Hier wähle ich meine Datenbank aus. Schon hier bekomm ich eine Fehlermeldung.
    Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\Class\Datenbank.php on line 45
    PHP-Code:
        var_dump($db->ausgeben("SELECT * FROM `spiele`")); 
    &'nd hier wird mir nur NULL angezeigt.

    Hinweiße, wie ich auf mein Fehler stoße wäre sehr nett.
    Ich danke schon mal im voraus für eure Hilfreichen antworten.


  • #2
    Hallo,

    http://php.net/manual/de/mysqli.error.php
    Das würde ich ein bisschen mit untermischen.

    Hier wähle ich meine Datenbank aus. Schon hier bekomm ich eine Fehlermeldung.
    Bei der Datenbankauswahl? Und wie lautet die Fehlermeldung?

    PHP-Code:
                        if($this->connection == true
                        { 
                            if(
    is_resource($this->connection)) 
                            
    mysqli_select_db($db$this->connection); 
                        } 
                        else 
                        { 
                            if(
    is_resource($this->connection)) 
                            
    mysql_select_db($db$this->connection); 
                        } 
    Da vermischst du mysql_* und mysqli_*
    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

    Kommentar


    • #3
      Wie soll ich's genau beschrieben.
      Also mir wird da einfach NULL angezeigt. Egal ob ich eine Datenbank auswähle die Existiert oder nicht.
      Was ja wiederrrum heißt, dass es die Verbindung nicht herstellen kann. Allerdings steht die Datenbank verbindung also versteh ich den Fehler da irgendwie nicht.

      PS: habe die Connection nun auch mysqli_error hinzugefügt.
      PHP-Code:
      $this->connection mysqli_connect($host$user$pw) or die ("<br/>" mysqli_error); 
      Hier werden mir auch keine Fehler angezeigt

      Kommentar


      • #4
        PHP-Code:
        var_dump($db->db_auswahl("tutorial")); 
        1. Was soll var_dump() dort bringen? Die Methode gibt nichts zurück also gibt var_dump() immer null aus.

        2.
        PHP-Code:
        if(is_resource($this->connection)) 
        Wird nicht zu true auch wenn eine Verbindung etabliert wurde. is_resource() unterstützt mySQLi nicht (bzw. eine mySQLi Verbindung ist ein Objekt und keine Ressource.)
        Ich weiß auch nicht was diese Bedingung bringen soll, lass sie einfach weg.

        3. Die Syntax für mysqli_select_db ist:
        Code:
        bool mysqli_select_db ( mysqli $link , string $dbname )
        Du hast die Parameter vertauscht.

        BTW: Hat es einen Grund, warum du zum Auswählen der Datenbank eine eigene Methode baust? Das könnte man auch direkt im Konstruktor mit einbauen:
        PHP-Code:
        public function __construct($host null$user null$pw null$db null

            if (! 
        $this->connection
            { 
                
        $this->connection mysqli_connect($host$user$pw$db); 
                ... 
        4.
        PHP-Code:
        var_dump($db->ausgeben("SELECT * FROM `spiele`")); 
        Auch das gibt nichts aus, da die Methode ausgeben() keinen Rückgabewert liefert. Füge der Methode hinzu:
        PHP-Code:
        return $fetch_row

        Kommentar


        • #5
          monolith.
          Ok, vielen Dank. Wusste nicht. Welche möglichkeit, zu schauen ob die Verbindung steht außer is_resource() gibt es sonst?
          &'nd zu 3 vielen Dank, werde dies dan gleich mal umschreiben (:

          Kommentar


          • #6
            Welche möglichkeit, zu schauen ob die Verbindung steht außer is_resource() gibt es sonst?
            Falscher Ansatz, meines Wissens nach. Im Konstruktor schaust du ob es einen Fehler beim Aufbau der DB-Verbindung gibt. Falls ja setzt du $this->connection auf null und wirfst eine exception.
            PHP-Code:
            if (mysqli_connect_error()) {
                
            $this->connection null;
                throw new 
            Exception('Connection error: '.mysqli_connect_error());

            Dann kannst du einfach immer prüfen...
            - ob eine Verbindung existiert:
            PHP-Code:
            if ($this->connection
            - oder nicht:
            PHP-Code:
            if (! $this->connection
            Sprich die Idee ist: Nur wenn der Verbindungsaufbau gelingt hinterlege ich in $this->connection überhaupt etwas. D. h. wenn sich dort ein Objekt befindet - was man mit if ($this->connection) überprüfen kann - kann man davon ausgehen, dass eine Verbindung existiert.

            Kommentar


            • #7
              Ok. Ja vielen herzlichen dank für den hinweiß. Werde es sofort ausprobieren & umschreiben.

              Kommentar


              • #8
                Das was du da bauen willst ist ein Datenbank Adapter: https://gist.github.com/Golpha/8446061
                [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


                • #9
                  Was ist der Sinn von sowas?
                  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


                  • #10
                    Zitat von hausl Beitrag anzeigen
                    Was ist der Sinn von sowas?
                    http://de.wikipedia.org/wiki/Inversion_of_Control
                    http://de.wikipedia.org/wiki/Lazy_Loading
                    [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


                    • #11
                      Lazy Loading in dem Sinne, dass "global" nur eine einzige Verbindung aufgebaut wird?

                      Kommentar


                      • #12
                        Zitat von monolith Beitrag anzeigen
                        Lazy Loading in dem Sinne, dass "global" nur eine einzige Verbindung aufgebaut wird?
                        Lazy Loading in dem Sinne das die Verbindung nur dann Aufgebaut wird wenn sie benötigt wird und das auch nur einmal.
                        [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


                        • #13
                          Stimmt, gar nicht gesehen dass da 'ne Closure mit verwendet wird die die Verbindung erst auf Anfrage etabliert.

                          Kommentar


                          • #14
                            Zum Abschluss hätte ich eventuell noch eine frage.
                            Ich habe die Klasse jetzt etwas um strukturiert, dass die Verbindung nicht im _-constructor aufgebaut wird sondern eine Methode mit der ich die Verbindung aufbaue.
                            Meine frage nun, kann/wie bekomm ich die Verbindungsdaten in nem array rein ?
                            also z.b.
                            PHP-Code:
                            <?PHP

                            class Database
                            {

                            private 
                            $db-co = array();

                            public function 
                            __construct(db-co['host'] . . .)
                            {

                            ...

                            }
                            ?>
                            Den so Funktioniert es ja nicht, da ich ja keine " [ " zeichen dadrin haben darf.

                            Sorry, dass die Frage noch etwas Amateurhaft ist
                            Oder eventuell ein "Stichwort" wonach ich googlen kann wäre auch sehr Hilfreich.

                            Kommentar


                            • #15
                              Na einfach so und als Parameter übergibst du halt einen Array:
                              PHP-Code:
                              public function __construct(array $dbCon) {
                                  
                              $this->dbCon $dbCon;

                              Instanziierung kann dann so erfolgen:
                              PHP-Code:
                              $db = new Database(array('host' => 'localhost''user' => 'username''password' => 'password')); 

                              Kommentar

                              Lädt...
                              X