2011-01-14 5 views
3

Ich versuche, den Hang mit benutzerdefinierten Session-Handler zum Speichern von Sitzungsdaten in einer MySQL-Datenbank zu bekommen. Allerdings habe ich immer die folgende Warnung erhalten:mysql_close(): geliefert Argument ist keine gültige MySQL-Link-Ressource

mysql_close(): supplied argument is not a valid MySQL-Link resource 

Hier ist der Code ich verwende, die ich von here bekam:

function _open(){ 

    global $_sess_db; 
    $_sess_db = mysql_connect("localhost", "root", "******"); 
    if ($_sess_db) { 
     return mysql_select_db('style', $_sess_db); 
    } 
    return false; 
} 

function _close(){ 
    global $_sess_db; 
    return mysql_close($_sess_db); //error happens here 
} 

Der vollständige Text der Fehlermeldung schließlich verweist auf die letzte " return mysql_close ($ _ sess_db); " Linie. Ich kann bestätigen, dass die mysql_connect-Information tatsächlich funktioniert, und ich habe auch den Rest der Session-Handler-Funktionen definiert.

Und falls es hilft, bekomme ich diese Fehler sofort beim Laden der Seite, ohne tatsächlich eine der Session-Handler-Funktionen aufzurufen, und ohne dass aktuelle Sitzungen geöffnet sind.


Antwort

3

Das Problem ist Ihr variabler Bereich. Das globale Schlüsselwort tut nichts, wenn die Variable nicht zuerst außerhalb einer Funktion definiert wurde. Eine Alternative wäre die Verwendung des super globalen $ GLOBALS ['_ sess_db'] oder die Definition von $ _sess_db außerhalb von Funktionen.

+0

Wenn Sie nicht mehrere Datenbanken verwenden, müssen Sie außerdem möglicherweise nicht angeben, welche DB-Verbindung geschlossen werden soll, da die zuletzt geöffnete Verbindung automatisch geschlossen wird, wenn kein Argument übergeben wird. – dqhendricks

+1

auch, non-persistente db-verbindungen automatisch am ende des skripts geschlossen, so dass die db-verbindung geschlossen werden kann abhängig von ihrem projekt nicht einmal benötigt werden. – dqhendricks

+0

Ja, variabler Umfang war das Problem. Ich bekomme diesen Fehler nicht mehr. Nach dem Start der Sitzung versuche ich $ _SESSION ['uid'] = 4. Aber ich sehe nicht, dass dies in der Datenbank reflektiert wird. Da ich eine session_write-Funktion definiert habe, sollte diese benutzerdefinierte Funktion für $ _SESSION ['uid'] = ... verwendet werden, richtig? In diesem Fall wäre das Problem in meiner benutzerdefinierten Handler-Funktion? – maxedison

0

versuchen, einige Debug-Ausdrucke in _open Hinzufügen() und _close() und sehen, ob sie genannt werden, wenn Sie sie, um nicht zu erwarten.

+0

Ich denke, dass ich nicht sicher bin, wann sie aufgerufen werden sollen. Sollten sie nicht jedes Mal automatisch aufgerufen werden, wenn eine Seite geladen wird? Das ist was passiert. Mit anderen Worten, ich rufe session_start() nicht auf, und keine vorherige Sitzung existiert. – maxedison

+0

Ich habe auch keine Sitzungen für den Autostart in der Datei php.ini eingestellt. – maxedison

Verwandte Themen