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?
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            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!
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar

                  Lädt...
                  X