【发布时间】:2011-10-24 18:34:14
【问题描述】:
我正在尝试修改将我的会话数据存储在数据库中的脚本,而不是默认的,但我遇到了一些麻烦,因为我不断收到上述错误。它说我在第 176 行和第 201 行遇到错误。
这是 sessionPdo 类中的函数
public function _write($id, $sessionData)
{
$session = $this->fetchSession($id); // line 176
if( $session === false ) {
$stmt = $this->db->prepare('INSERT INTO sessions (id, data, unixtime) VALUES (:id, :data, :time)');
} else {
$stmt = $this->db->prepare('UPDATE sessions SET data = :data, unixtime = :time WHERE id = :id');
}
$stmt->execute( array(
':id' => $id,
':data' => $sessionData,
':time' => time()
));
if( $this->transaction ) {
$this->db->commit();
}
}
这里是 fetchSession 方法,以防万一。
public function fetchSession($id)
{
$stmt = $this->db->prepare('SELECT id, data FROM sessions WHERE id = :id AND unixtime > :unixtime');
$stmt->execute( array(':id' => $id, ':unixtime' => ( time() - (int) ini_get('session.gc_maxlifetime') ) ) );
$sessions = $stmt->fetchAll();
if( $this->transaction ) {
$this->db->commit();
}
return empty($sessions) ? false : $sessions[0] ;
}
我一直在努力找出我做错了什么,因为我找到的所有解决方案都是因为程序员试图从课堂外调用 $this。我是 PDO 的新手,因此提前感谢您提供的任何帮助。
【问题讨论】:
-
代码本身看起来不错。问题可能首先在于
_write()。如果该代码在对象范围之外调用 _write(),您将收到此错误,因为在这种情况下 $this 不会在 _write() 中定义。 -
176和201分别是哪几行? -
与PDO无关。您不是偶然在任何地方静态地调用
_write()吗?sessionPdo::_write(.....)?尝试在第 176 行之前添加print_r(debug_backtrace())以查看调用的内容。 -
@Jonathon Spooner - 第 176 行被注释在第一部分代码的第三行。我没有包含第 201 行,因为我想我一次只处理一个问题,并希望它是相同的解决方案。
-
@alexantd 我已经添加了你的建议,它返回了这个: Array ( [0] => Array ( [function] => _write [class] => we_sessionPdo [type] => : : [args] => Array ( [0] => 2b73efe7a6899da83ab0ad7ccb474560 [1] => access|i:1;currentURL|s:42:"localhost/music-phonebook/index.php";mpbat|i:594546384; ) ) ) 这只是我存储为的一些会话变量脚本的一部分。
标签: php database oop session pdo