【发布时间】:2016-02-02 16:30:51
【问题描述】:
我正在为 SessionHandlerInterface 类使用以下写入方法:
public function write($session_id, $session_data) {
$sth = DBCxn::get()->prepare("UPDATE sessions SET session_data = ?, last_update = NOW() WHERE session_id = ?");
$sth->execute(array($session_data, $session_id));
if ($sth->rowCount() == 0) {
$sth = DBCxn::get()->prepare("INSERT INTO sessions (session_id, session_data, last_update) VALUES (?, ?, NOW())");
$sth->execute(array($session_id, $session_data));
}
问题是如果session_data对于更新查询没有改变rowCount()会返回0,反过来该函数会尝试插入一个已经存在的session_id并返回错误。
我认为作为一种解决方案来进行选择查询以验证 session_id 是否存在。
还有哪些其他方法可以解决这个问题?
【问题讨论】: