Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] OOP Vererbung im MVC

Einklappen

Neue Werbung 2019

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

  • [Erledigt] OOP Vererbung im MVC

    Hallo,

    ich habe in einer MVC ein class MySQL implementiert , es sieht nähmlich so aus :

    PHP-Code:

      <?php

    class MySQL extends PDO
    {

       private 
    $_result NULL;
       private 
    $_link NULL;
       private static 
    $_instance NULL;
       private 
    $_config = array();

       public static function 
    getInstance(array $config = array())
       {
           if (
    self::$_instance === NULL)
           {
              
    self::$_instance = new self($config);
           }
           return 
    self::$_instance;
       }

       public function 
    __construct(array $config)
       {
            if (
    count($config) < 3)
            {
                throw new 
    Exception('Invalid number of connection parameters');
            }
            
            
    self::$_instance $this;
        
    $this->_config $config;
            list(
    $dsn$user$password) = $this->_config;
            
    parent::__construct($dsn$user$password); $this->setAttribute(PDO::ATTR_STATEMENT_CLASS,array('MyPDOStatement', array($this)));
    $this->setAttribute(self::ATTR_ERRMODEself::ERRMODE_EXCEPTION);
       }

    class 
    MyPDOStatement extends PDOStatement {

        protected 
    $connection;
            protected  function 
    __construct(PDO $connection)
        {
            
    $this->connection $connection;
        }
        }
    }
    ich habe mir danach eine Klasse Login gebaut die dann diese Klasse benutzt :
    PHP-Code:
    class login {
    private 
    $id NULL;
    private 
    $loginname NULL;
    private 
    $passwort NULL;
    private 
    $email NULL;
    private 
    $session NULL;
    private 
    $dbconnection NULL;
    private  
    $config = array(SQL_DSNSQL_USERNAMESQL_PASSWORD);

    public function 
    __construct($sessionid)
            {
                    
    $this->dbconnection MySQL::getInstance($this->config);
                    
    $this->sessions $sessionid;             
        }
    public function 
    logged_in(){
                    
       
    $_query =      'SELECT * FROM users WHERE session = :session';
       
    $query =  $this->dbconnection->prepare($_query);
       
    $query->bindParam(':session'$this->session);
       
    $query->execute();
       return (
    $this->dbconnection->countRows('users') !== 1) ? false :true;               
             } 
    die befehle prepare funktioniert soweit ( ich habe es mit var_dump überprüft) , aber bindParam funktioniert nicht !!

    Folgende Fehlermeldung bekomme ich : Catchable fatal error: Object of class stdClass could not be converted to string wo bindParam vorkommt!!


  • #2
    Ja? Und was haste unternommen? Was willst du von uns? Ich seh keine Frage ... vlt. solltest du halt $this->session ausgeben und schauen was drin steht, anscheinend ist es kein String.

    Kommentar


    • #3
      Zitat von Flor1an Beitrag anzeigen
      Ja? Und was haste unternommen? Was willst du von uns? Ich seh keine Frage ... vlt. solltest du halt $this->session ausgeben und schauen was drin steht, anscheinend ist es kein String.
      Die frage war halt die Fehlermeldung!! warum es so meckert!! $this->session war im Ordnung, ich habe in der Klasse MyPDOStatement, die function bindParam überladen, anscheint funktioniert es jetzt!!

      Danke

      Kommentar


      • #4
        ich habe in der Klasse MyPDOStatement, die function bindParam überladen
        Mit was und wieso?

        Kommentar


        • #5
          Zitat von xm22 Beitrag anzeigen
          Mit was und wieso?
          so :
          PHP-Code:
          class MyPDOStatement extends PDOStatement {

              protected 
          $connection;
                  protected  function 
          __construct(PDO $connection)
              {
                  
          $this->connection $connection;
              }

                  public function  
          execute() {
                                      
          parent::execute();
                  }
                  public function  
          bindParam($parameter, &$variable$data_type null$length null$driver_options null) {
                                      
          parent::bindParam($parameter$variable$data_type$length$driver_options);
                  }
              } 

          Kommentar


          • #6
            Überladen?! Die Methoden machen nichts anderes als die Originalmethoden?! Was soll also der Quark?
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Überladen kannst du sowieso nicht in PHP. Darunter versteht man auch was etwas anderes als du dort machst.

              Kommentar


              • #8
                Ja ihr habt recht gehabt!! funktioniert nicht ich habe nochmal überprüft!!
                Das problem aus der Klasse Login kann ich nicht bindParam benutzen!!

                ich habe das probiert :
                PHP-Code:
                $_query 'SELECT * FROM users
                               WHERE loginname= :loginname AND passwort= :passwort LIMIT 1'
                ;
                               
                               
                $query $this->dbconnection->prepare($_query);
                               
                               
                $query->bindParam(':loginname'$this->loginname);
                               
                $query->bindParam(':passwort'MD5($this->passwort));
                               
                var_dump($query);
                           
                $query->execute(); 
                aus var_dump : bekomme ich folgendes :

                PHP-Code:
                object(MyPDOStatement)#6 (2) { 
                ["connection:protected"]=>  object(MySQL)#5 (3) 

                    [
                "_result:private"]=>  NULL 
                    
                ["_link:private"]=>  NULL 
                    
                ["_config:private"]=>  array(3
                    { 
                        [
                0]=>  string(39"mysql:dbname=db_us;host=localhost" 
                        
                [1]=>  string(11"user1" [2]=>  string(14"123pass" 
                    


                 [
                "queryString"]=>  string(94
                   
                "SELECT * FROM users 
                    WHERE loginname= :loginname 
                    AND passwort= :passwort LIMIT 1" 

                also funktioniert prepare aber bindParam nicht!!

                Kommentar


                • #9
                  Wieso nicht? Schick die Query halt mal ab. Das wird da nicht eingetragen!
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar

                  Lädt...
                  X