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:

    Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

    Kommentar


    • #3
      Und was soll ich damit?

      Kommentar


      • #4
        Keine Ahnung, was soll ich mit deinem Code?
        Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

        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?
            Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

            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.
                  Zitat von nikosch
                  Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                  Kommentar


                  • #10
                    Database hat auch keine Methode "prepare". PDO hat diese Methode, nicht deine Database-Klasse.
                    Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

                    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.
                        Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

                        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.
                              Zitat von nikosch
                              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                              Kommentar

                              Lädt...
                              X