problem mit mysql-klasse


  • Mod

    Sqwan schrieb:

    OK... Ich versteh das schlafen legen noch nicht so ganz. Was bringt mir das return aus dem beispiel.

    __sleep returned ein array aus variablen die serialisiert werden sollen und die beim unserialize wieder geladen werden.

    In dem Beispiel sind das eben server, username, password, db. Diese Variablen werden serialisiert und beim unserialize wieder in das Objekt zurück geschrieben. Danach wird __wakeup aufgerufen. Im __wakeup kannst du dann einfach connect() aufrufen - da du ja die Verbindungsdaten noch alle hast.

    bei dir wäre das in etwa:

    function __sleep() {
      return array('mysql_user', 'mysql_pass', 'mysql_base', mysql_host');
    }
    
    function __wakeup() {
      $this->connect();
    }
    


  • ^^ okay... ich habe schlecht formuliert... Muss ich mir die returnten variablen selber speichern oder passiert das allein ?



  • Hallo,

    beim Aufruf von serialize($Object) wird die magical __sleep aufgerufen!

    $myObj = new cmysql;
    $_SESSION['myObj'] = serialize($myObj);
    
    unserialize($S_SESSION['myObj']); // in deinem Fall wird die Verbindung wieder hergestellt, da bei unserialize die magical __wakeup aufgerufen wird.
    

    VlG


  • Mod

    Sqwan schrieb:

    ^^ okay... ich habe schlecht formuliert... Muss ich mir die returnten variablen selber speichern oder passiert das allein ?

    Du lieferst nur die Namen der Variablen die serialisiert werden sollen. Alles andere macht PHP. Sowohl das serialisieren als auch das deserialsieren und auch das zuweisen, etc.


  • Mod

    hmmz schrieb:

    $myObj = new cmysql;
    $_SESSION['myObj'] = serialize($myObj);
    
    unserialize($S_SESSION['myObj']); // in deinem Fall wird die Verbindung wieder hergestellt, da bei unserialize die magical __wakeup aufgerufen wird.
    

    $_SESSION serialisiert und deserialisiert selber.



  • Hallo,

    also reicht eine Zuweisung des Object an die Session-Variable?

    Ich hab's von folgendem Beispiel auf php.net abgeleitet (Achtung, gekürzt):

    if (!isset($_SESSION['myObj'])) {
        $myObj = new MyClass();
    
        echo "\t\n\nNow serialize and unserialize object\n";
        $myObj = unserialize(serialize($myObj));
    
        //Store object in session
        $_SESSION['myObj'] = serialize($myObj);
    
    } else {
        //if myobj was stored
        $myObj_loaded = unserialize($_SESSION['myObj']);
        unset($_SESSION['myObj']);
    }
    

    VlG


  • Mod

    hmmz schrieb:

    also reicht eine Zuweisung des Object an die Session-Variable?

    ja.

    wäre sonst ja ziemlich unpraktisch.



  • ok, das wusst' ich nicht! Danke 👍

    VlG



  • Aus Zeitmangel noch nicht getestet... Mach ich aber heut abend.

    @hmmz... Genau das automatische Serialisieren war ja das prob. Weil man Mysql_Verbindungen nicht serialisieren kann...

    Dennoch vielen dank euch beiden für die Mühe...



  • Update:

    __sleep und __wakeup funktionieren super... Vielen dank euch beiden. Habt mir sehr geholfen...


Anmelden zum Antworten