Ankündigung

Einklappen
Keine Ankündigung bisher.

Objekt in Session-Array ablegen

Einklappen

Neue Werbung 2019

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

  • Objekt in Session-Array ablegen

    hallo,
    ich habe für eine Webseite, auf der ein großer Teil AJAX verwendet wird,
    eine Klasse geschrieben, die eine Verbindung mit einer mysql Datenbank aufbaut, die verbindungs ressource in die Klassenvariable $conn schreibt. Diese klasse stellt auch methoden zur verfügung, um einige mysql befehle auszuführen, damit man nichtmehr direkt mit SQL zu tun hat.
    Damit man pro Besucher auf der Seite nur eine mysql verbinding hat, und nicht mit jedem mal, wenn der user auf einen Button klickt, eine neue Verbindung aufgebaut werden muss, will ich das Objekt, das ich aus der Klasse erzeuge in eine Session Variable schreiben und dann in den anderen Dateien eben dieses Objekt weiter verwenden. Das klappt in der Praxis jedoch nicht so ganz.
    Wenn ich das Objekt direkt in die Session variable erzeuge:
    PHP-Code:
    <?php
    // der Code Schnipsel ist in einer Datei drin, die beim ersten aufruf der Seite ausgeführt wird, um die komplette Seite zu generieren
    if (class_exists("Db"))
        {
            
    $_SESSION['db'] = new Db();
            
    $_SESSION['db']->init(); // DB::init() stellt die verbindung zur Datenbank her und speichert die verbindungsressource in der Klassenvariable $conn
        
    }
        else
        {
            
    $okay        false;
        }
    ?>
    und dann in einer anderen Datei wieder benutze:
    PHP-Code:
    <?php
    // andere Datei, sie wird von einem AJAX request aufgerufen
    require_once "../include/db.php.inc";
    require_once 
    "../include/log.php.inc";

    session_start();


    $content $_SESSION['db']->select("pages"false, array("page"=>$page));
    ?>
    bekomm ich vom PHP Parser das zurück:
    Code:
    Warning: mysql_query() expects parameter 2 to be resource, integer given in /var/www/kazecms/include/db.php.inc on line 84
    die Ausgabe von var_dump an der Stelle, wo das objekt erzeugt wird ist:
    Code:
    object(Db)#3 (1) {
      ["conn"]=>
      resource(4) of type (mysql link)
    }
    und in dem Script, das von dem AJAX request aufgerufen wird ist sie:
    Code:
    object(Db)#1 (1) {
      ["conn"]=>
      int(0)
    }
    Weder die Google Suche noch eine Suche hier haben mich weitergebracht.

    Mache ich etwas falsch? Geht das nicht so, wie ich das will, oder seht ihr einen Fehler meinerseits?


    mfg
    mupilz


  • #2
    Geht das nicht so
    Nein. Steht auch im Manual. Ressourcen könne nicht serialisiert werden (ergo auch nicht in der Session). Das ganze Verfahren macht auch gar keinen SInn, dafür sind Sessions nicht gedacht.
    --

    „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


    • #3
      Stichwörter wären hier persistente Verbindungen und Connection Pooling.

      Kommentar

      Lädt...
      X