Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Singleton mit PDO

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Singleton mit PDO

    Hallo @alle;

    Ich bekomme immer die fehlermeldung :
    Fatal error: Call to a member function prepare() on a non-object
    hier sieht meine Klasse aus :
    PHP-Code:
       class Singleton extends PDO {

        private static 
    $_instance;
        public function  
    __construct() {
           
        }


        public static function 
    getInstance(){
            if(!isset(
    self::$_instance)){
                try{
                    
    self::$_instance = new PDO(SQL_DSNSQL_USERNAMESQL_PASSWORD,
                            array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                    
    self::$_instance-> setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                }catch (
    PDOException $e){
                    
    self::disconnect();
                    return 
    $e->getMessage();
                }
            }
            return 
    self::$_instance;
        }

        private function  
    __clone() {

        }

        public static function 
    disconnect(){
            
    self::$_instance null;
        }

        public static function 
    execute($sql$params=null)
        {
            try{
                
    $dbh self::getInstance();
                
    $stmt $dbh->prepare($sql);
                
    $stmt->execute($params);
            }
            catch(
    PDOException $e)
            {
                
    self::disconnect();
            }
        }

        public static function 
    GetAll($sql$params$fetchStyle PDO::FETCH_ASSOC)
        {
            
    $result null;
            try {
            
    $dbh self::getInstance();
            
    $stmt $dbh->prepare($sql);
            
    $stmt->execute($params);
            
    $result $stmt->fetchAll($fetchStyle);
            }catch (
    PDOException $e)
            {
                
    self::disconnect();
            }
            return 
    $result;
        }

    und so rufe ich dann mein singleton aus :
    PHP-Code:
    $username $_POST['username'];
        
    $password $_POST['password'];
        
    $query "SELECT * FROM users WHERE username = '".$username."' AND password = '".$password."'";
        
    $params = array(':$username'=>$username':$password'=>$password);
        
    $fetchStyle PDO::FETCH_ASSOC;
        
    $stmt = new Singleton();
        
    $stmt->execute($query$params);
        
    $result $stmt->GetAll($query$params$fetchStyle); 
    Kann mir jemand sagen wo ich n fehler gemacht habe?

  • #2
    Deine getInstance Methode liefert entweder eine Objektreferenz - oder einen String (im Fehlerfall) - tritt denn eine Exception auf?

    was sagt var_dump zum zurückgelieferten Objekt?
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      var_dump? wie soll ich das überprüfen?

      Kommentar


      • #4
        da wo der fehler in deiner Singleton-Klasse auftritt (die zeile wurde dir ausgegeben) du holst dir ja dein PDO Objekt über die getInstance Methode..

        Code:
         try{
                    $dbh = self::getInstance();
                    $stmt = $dbh->prepare($sql);
                    $stmt->execute($params);
                }

        Kommentar


        • #5
          Heuu.. $dbh ist doch ein objekt der klasse PDO oder verstehe ich was falsch?
          edit : ha jetzt verstehe ich!! moment!!

          Kommentar


          • #6
            Nur, wenn in getInstance KEINE Exception aufgetreten ist (schau dir die Methode mal an - im catch-Block lieferst du eine Fehlermeldung zurück, keine Instanz einer Klasse)
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              nein ist richtig, aber du rufst doch dein pdo-objekt über Singleton::getInstance(); auf, dort geschieht auch der fehler, denn das zurückgelieferte ergebnis(wie oben bereits schon erwähnt), ist kein objekt, also prüfe was es ist

              Kommentar


              • #8
                Danke @alle!

                also es war doch ein PDO Objekt aber die hostname war falsch!

                Danke für die mühe!!

                Kommentar


                • #9
                  Zitat von 3logy Beitrag anzeigen
                  also es war doch ein PDO Objekt
                  on a non-object
                  Glaub ich weniger
                  "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                  Kommentar

                  Lädt...
                  X