Mordor
Registered User
Mahlzeit allerseits
Ich wollte gestern eine Sessionverwaltung von normalem mysql auf mysqli umstellen. Da ich die Verbindung schon vorher in einem anderen Script hergestellt habe, habe ich die Variable für die Datenbankverbindung ($mysqli) über Global in die Klasse eingesetzt und diese dann der Klassenvariable $this->DB übergeben.
Hier erst mal der Code:
Das ganze funktioniert eigentlich recht gut, bis auf die Funktion ms_write().
Jedesmal wenn PHP diese Funktion aufruft erhalte ich folgende Fehlermeldung:
Mit Zeile 89 ist die Zeile $sql = $this->DB->query($query) in der Funktion ms_write gemeint.
Das was ich nicht ganz verstehe ist, warum ich hier keinen Aufruf mit $this machen darf. In den anderen Funktionen funktioniert es ja auch. Und bis zu diesem Punkt läuft es ja einwandfrei.
Ich habe dann noch versucht, das ganze über mysqli_query aufzurufen, dass funktioniert auch. Jedoch hätte ich gerne den Aufruf mit $this, da dies zum einen sauberer ist, und zum anderen produziert der Aufruf mit myslqi_query noch ein PHP-Warning.
Vieleicht hab ich ja nur etwas übersehen, und jemand hat bessere Augen wie ich.
Gruß Mordor
Ich wollte gestern eine Sessionverwaltung von normalem mysql auf mysqli umstellen. Da ich die Verbindung schon vorher in einem anderen Script hergestellt habe, habe ich die Variable für die Datenbankverbindung ($mysqli) über Global in die Klasse eingesetzt und diese dann der Klassenvariable $this->DB übergeben.
Hier erst mal der Code:
Code:
<?php
class sessionmanager
{
const SESSIONNAME = 'SESSION';
const DBDROP = "DROP TABLES session IF EXISTS";
const DBDEVINITION = "
CREATE TABLE `session` (
`sessionid` VARCHAR( 32 ) NOT NULL ,
`userid` BIGINT( 20 ) NOT NULL ,
`variables` TEXT NOT NULL ,
`lacces` INT( 14 ) NULL ,
PRIMARY KEY ( `sessionid` ),
KEY `userid`(`userid`)
) TYPE = MYISAM ;";
private $DB;
public function __construct() {
global $mysqli;
$this->DB= $mysqli;
ini_set('session.use_trans_sid',1);
ini_set('session.use_coockies',0);
ini_set('session.gc_probability',1);
session_module_name("user");
session_set_save_handler(array('sessionmanager',
'ms_open'),
array('sessionmanager',
'ms_close'),
array('sessionmanager',
'ms_read'),
array('sessionmanager',
'ms_write'),
array('sessionmanager',
'ms_destroy'),
array('sessionmanager',
'ms_gc'));
session_name(self::SESSIONNAME);
session_start();
}
private function settable(){
$this->DB->query(self::DBDROP);
$this->DB->query(self::DBDEVINITION);
}
function ms_open($sesspath, $sessname)
{
$time = time();
$sessid = session_id();
$query = "SELECT * FROM session WHERE sessionid = '$sessid'";
$sql = $this->DB->query($query);
if($sql->num_rows == 0)
{
$query = "INSERT INTO`session`(`sessionid` , `lacces` ) VALUES ('$sessid', '$time');";
}
else
{
$query = "UPDATE session SET lacces = '$time' WHERE sessionid='$sessid'";
}
$sql->close();
$RS = $this->DB->query($query);
return $RS;
}
function ms_read($sessid)
{
$query = "SELECT * FROM session WHERE sessionid = '$sessid'";
$sql = $this->DB->query($query);
$arrRS = $sql->fetch_assoc();
if (is_array($arrRS))
{
return $arrRS[variables];
}
else
{
return FALES;
}
$sql->close();
}
function ms_write($sessid, $varis)
{
$query = "UPDATE session SET variables = '$varis' WHERE sessionid = '$sessid'";
$sql = $this->DB ->query($query);
return (bool)$sql;
}
function ms_destroy($sessid)
{
$query = "DELETE FROM session WHERE sessionid = '$sessid'";
$RS = $hits->DB->query($query);
return (bool) $RS;
}
function ms_gc($sesslt)
{
$tstamp = time() - $sesslt;
$query = "DELETE FROM session WHERE lacces < '$tstamp'";
$RS = $this->DB->query($query);
return (bool) $RS;
}
function ms_close()
{
return;
}
}
new sessionmanager();
?>
Jedesmal wenn PHP diese Funktion aufruft erhalte ich folgende Fehlermeldung:
Code:
[13-Apr-2007 02:30:05] PHP Fatal error: Using $this when not in object context in /Applications/MAMP/htdocs/portal/includes/session_verwaltung.inc.php on line 89
Das was ich nicht ganz verstehe ist, warum ich hier keinen Aufruf mit $this machen darf. In den anderen Funktionen funktioniert es ja auch. Und bis zu diesem Punkt läuft es ja einwandfrei.
Ich habe dann noch versucht, das ganze über mysqli_query aufzurufen, dass funktioniert auch. Jedoch hätte ich gerne den Aufruf mit $this, da dies zum einen sauberer ist, und zum anderen produziert der Aufruf mit myslqi_query noch ein PHP-Warning.
Vieleicht hab ich ja nur etwas übersehen, und jemand hat bessere Augen wie ich.
Gruß Mordor