gpt4 book ai didi

php - 有些东西正在取消我的数据库类

转载 作者:行者123 更新时间:2023-11-29 14:11:28 25 4
gpt4 key购买 nike

我将 session 存储在 MySQL 数据库中。

我有一个具有多种功能的 SessionManager 类。然而,在类中的某个地方,我的数据库类正在被卸载,我似乎无法找出原因。

我使用以下方法测试了该类是否存在:

echo (class_exists('database') === TRUE ? 'Yes' : 'No');

这是产生 fatal error 的函数,告诉我类 database没有找到。请注意,上面的测试返回 true,其中测试位于 __construct 中。并且在此方法中特别失败:

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 "";
}

有人能看到这里发生了什么吗?

最佳答案

开头有两个要点:

  1. fatal error 不是说谎。因此,database 类在某个(以及那个)点丢失了(不是未设置)。
  2. 您在 session 类中使用静态方法。只需要在调用相关函数时 session 类存在即可。没有任何设置可以确保实际加载数据库类定义。

这导致了您应该需要该函数调用的database 类定义的解决方案。将其放入,database 类就被定义了。其实我不明白你对问题中的哪一部分这么感兴趣。

类,尤其是静态函数是相当直接的,您也可以在一定程度上用标准函数替换它们,这可能会使您的使用类型更明显、更直接。在使用之前,不要使用您感觉不常见的语言功能。

关于php - 有些东西正在取消我的数据库类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com