我正在將會話存儲在MySQL數據庫中。有些東西是不正確的我的數據庫類
我有一個SessionManager類,它有多個功能。然而,在類的某個地方,我的數據庫類正在被卸載,我似乎無法找出原因。
我測試,以查看是否存在類使用:
echo (class_exists('database') === TRUE ? 'Yes' : 'No');
這是正在產生一個致命的錯誤告訴我,類database
沒有找到該功能。記下測試位於__construct
,在這種方法具體失敗時的測試上面返回true:
public static function writeSession($sessionId, $sessionData)
{
$sessionId = session_id();
session_write_close();
session_id($sessionId);
$expiry = time() + ini_get('session.gc_maxlifetime') - 1;
$sessionId = database::getInstance()->real_escape_string($sessionId);
$sessionData = database::getInstance()->real_escape_string($sessionData);
$result = database::getInstance()->query("SELECT sessionid FROM sessions WHERE sessionid='$sessionId'");
($result->num_rows > 0) ?
database::getInstance()->query("UPDATE sessions SET sessionid='$sessionId',expiry='$expiry',sessiondata= '$sessionData' WHERE sessionid='$sessionId'")
: database::getInstance()->query("INSERT INTO sessions (sessionid,expiry,sessiondata) VALUES ('$sessionId','$expiry','$sessionData')") ;
}
即使我嘗試實例數據庫的一個新的對象,類沒有找到,就好像它消失。
類的作品,並罰款前面的方法:
public static function readSession($sessionId)
{
$sessionId = session_id();
$sessionId = database::getInstance()->real_escape_string($sessionId);
$time = time();
$result = database::getInstance()->query("SELECT sessiondata FROM sessions WHERE sessionid='$sessionId' AND expiry > $time");
if ($result->num_rows > 0) {
$row = $result->fetch_array();
return $row['sessiondata'];
}
return "";
}
任何人都可以看到這裏發生了什麼呢?
'public static'?這意味着它可以通過構造函數 – ajreal
Singletons **和**'mysql _ *()'?沒有冒犯隊友,但你應該得到你所有的頭痛。 –
@ajreal,是的,它們只是公開的,因爲還有其他與會話處理程序的交互。 – bear