Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PDO singleton

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] PDO singleton

    Hiho, hänge grade an meiner PDO Klasse, die was in die Datenbank einfügen soll. Iwie klappt das net. Seht ihr den Fehler. Hier mein Code:

    PHP-Code:
    class Database
    {
        private 
    $_db;
        static 
    $_instance;

        private function 
    __construct(){
            
    $this->_db = new PDO('mysql:host=localhost;dbname=test''root''');
        }

        public static function 
    getInstance() {
            if (!(
    self::$_instance instanceof self)) {
                
    self::$_instance = new self();
            }
            return 
    self::$_instance;
        }

    }
    //Anwendung
    $queryNewUserInsert Database::getInstance()->prepare('INSERT INTO users (firstName, lastName) VALUES(`Max`, `Mustermann`)');
    $queryNewUserInsert->execute(); 

  • #2
    Zitat von coolio Beitrag anzeigen
    Hier mein Code:
    Schön. Hier ein Bild, was ich im Internet gefunden habe:

    [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

    Kommentar


    • #3
      Und was soll ich damit?

      Kommentar


      • #4
        Keine Ahnung, was soll ich mit deinem Code?
        [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

        Kommentar


        • #5
          Alter was geht hier ab, hast du Stress mit deiner Frau oder so?

          Kommentar


          • #6
            Nö, alles gut. Du postest hier Code ohne irgendwelche eigenen Ansätze zur Ferhlebehebung. Du schreibst nichtmal, was genau nicht klappt. Wie erwartest du da Hilfe?
            [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

            Kommentar


            • #7
              Vielleicht versuchsts dus mal mit Vererbung...

              PHP-Code:
              class Database extends PDO {
                  static 
              $_instance;
                  
                  public function 
              __construct() {
                      
              parent::__construct('mysql:host=localhost;dbname=test''root''');
                  }
                  
                  public static function 
              getInstance() {
                      if (!(
              self::$_instance instanceof self)) {
                      
              self::$_instance = new self();
                      }
                      return 
              self::$_instance;
                  }

              Kommentar


              • #8
                Ok, die Kritik nehme ich an. Ich bekomme als Fehlermeldung
                Fatal error: Call to undefined method Database:repare() in C:\xampp\htdocs\projekt\test.php on line 4
                und weiss nicht wieso. Ich erzeuge ja eine Instanz der Klasse und rufe von dieser die prepare Methode auf.

                Kommentar


                • #9
                  PHP-Code:
                  VALUES(`Max`, `Mustermann`) 
                  Nöp.
                  Bei MySQL haben ' und ` verschiedene bedeutungen.
                  [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                  Kommentar


                  • #10
                    Database hat auch keine Methode "prepare". PDO hat diese Methode, nicht deine Database-Klasse.
                    [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

                    Kommentar


                    • #11
                      Thanks, das bringt mich mal ein Stück weiter. Ich probier mal selber wieder.

                      Kommentar


                      • #12
                        Übrigens: Wenn du in deiner Signatur schon Silex anpreist, solltest du es auch benutzen und nicht mit solchen Singleton-Krämpfen anfangen. Es gibt DBAL-ServiceProvider für Silex, die dir das alles abnehmen.
                        [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

                        Kommentar


                        • #13
                          Singletons sind für den Eimer. Bau ein statisches Facade wenn du unbedingt magisch drauf zugreifen willst und leg die PDO Instanz irgendwo ab.
                          [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
                            Ok, danke. Ihr habt meinen Wissenschatz erweitert. Aber zu educativen Zwecken möchte ich trotzdem wissen, wieso das Ding nicht tut. Hab den Zugriff wie folgt korrigiert:
                            PHP-Code:
                            $queryNewUserInsert Database::getInstance()->_db->prepare('INSERT INTO users (firstName, lastName) VALUES("Max", "Mustermann")');
                            $queryNewUserInsert->execute(); 
                            Zwar wird jetzt keine Fehlermeldung ausgegeben -.- es erscheint aber auch nichts in der Datenbank. Weiss jemand wieso?

                            Kommentar


                            • #15
                              Fehlermeldung ausgeben? Error-Reporting hochdrehen? Ich empfehle den Error-Modus auf EXCEPTION zu stellen bei PDO.
                              [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                              Kommentar

                              Lädt...
                              X