Php 会话_set _save _处理程序-为什么不';这个代码不起作用吗?

Php 会话_set _save _处理程序-为什么不';这个代码不起作用吗?,php,mysql,session,session-set-save-handler,Php,Mysql,Session,Session Set Save Handler,我一直试图将PHP会话数据保存到MySQL数据库中,但无法使其正常工作 举个简单的例子,下面的代码应该在每次访问时增加一个计数器。我看过其他例子,等等。但是有人能告诉我为什么这段代码不起作用吗?(Apache/2.2.11(Win32)DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 MySQL客户端版本:5.0.51a) 以下是mysql数据库表: CREATE TABLE IF NOT EXISTS `sessions` ( `session_I

我一直试图将PHP会话数据保存到MySQL数据库中,但无法使其正常工作

举个简单的例子,下面的代码应该在每次访问时增加一个计数器。我看过其他例子,等等。但是有人能告诉我为什么这段代码不起作用吗?(Apache/2.2.11(Win32)DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 MySQL客户端版本:5.0.51a)

以下是mysql数据库表:

CREATE TABLE IF NOT EXISTS `sessions` (
  `session_ID` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `session_data` mediumblob NOT NULL,
  `access` int(10) unsigned NOT NULL,
  PRIMARY KEY (`session_ID`),
  KEY `access` (`access`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
以及PHP代码(只需插入您的db凭据):


您的查询调用都没有任何错误检查。不要盲目地假设数据库部分工作,而是在每个阶段进行一些基本的错误检查,例如:

function mysession_write($session_id, $session_data) {
    global $sdbc;

    [...snip...]

    $stmt = mysqli_query($sdbc, $sql_write);
    if ($stmt === FALSE) {
       error_log("Failed to write session $session_id: " . mysqli_error($sdbc);
    }
    return($stmt);
}
一个查询只有一条成功之路,但有无数条失败之路。

From:
“警告 从PHP 5.0.5开始,写入和关闭处理程序在对象销毁后被调用,因此不能使用对象或抛出异常。但是,对象析构函数可以使用会话


可以从析构函数调用session_write_close()来解决这个鸡和蛋的问题。”

使用保存处理程序,它不会递增。我认为当函数尝试写入db('REPLACE…')时会发生错误,因为mysqli_查询将从有效的db对象句柄返回false,但PHP不会将调试信息发送到控制台;我想出来了。DB用户没有删除权限。事实上,我有各种各样的调试代码,但你不能像现在这样使用error_log(或其他任何东西),因为它不会进入标准输出:(根据php.net:“write”处理程序直到输出流关闭后才执行。因此,“write”中调试语句的输出“在浏览器中永远看不到处理程序…改为写入文件。”)因此,这是有效的:如果(!$result){error_log(“未能写入会话$session_id:”.mysqli_error($sdbc)。“\n”,3,'errors.txt');}我通常将我的php安装配置为写入自己的错误日志(
error_log
ini设置)并在调试时在日志文件上打开一个窗口,其中包含
tail-f
。请注意原始问题的日期。这个问题在将近一年前得到了一个公认的答案。
function mysession_write($session_id, $session_data) {
    global $sdbc;

    [...snip...]

    $stmt = mysqli_query($sdbc, $sql_write);
    if ($stmt === FALSE) {
       error_log("Failed to write session $session_id: " . mysqli_error($sdbc);
    }
    return($stmt);
}