致命错误:第0行session_start中未知的堆栈帧抛出异常

时间:2013-02-01 15:05:26

标签: php mysql session exception pdo

另一次更新! 13年2月2日 将PHP更新到版本5.3,现在它给了我这条消息,

致命错误:在[无活动文件]中显示消息'您无法序列化或反序列化PDO实例'的未捕获异常'PDOException':0堆栈跟踪:#0 [内部函数]:PDO-> __ sleep()#1 { main}在第0行的[无活动文件]中抛出

但是,我没有使用序列化或反序列化函数......

更新!

这是有效的,但这是不正确和最丑陋的方式。而且我不想这样做,但我认为这可能会有所帮助

$db    = new PDO("mysql:host=127.0.0.1;dbname=dbname;", "user", "pass");
public function login($user, $pass) {
    global $db;
    //stuff
}

原始帖子

我刚将我的项目文件切换到我的网站主机(它在本地完美运行)。

我收到此错误,致命错误:在第0行的Unknown中没有堆栈帧时抛出异常。

很有帮助哦。我现在只包含一个文件,它是一个具有一个函数的类,它计算输入的用户名和密码的ID,然后根据它找到的内容返回true或false。 (1 =真,除了1 =假之外的任何东西)。

我正在使用PDO(mysql),如果我没有连接到我的数据库,我不会收到错误但是如果我删除了session_start();从我的文档的顶部我也没有得到错误。     私人$ db;

public function __construct() {
    $this->db = new PDO("mysql:host=127.0.0.1;dbname=dbname;", "user", "pass");
    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

这就是我设置会话的地方,

if(isset($_POST["submit"])) {
    $errors = array();
    if($user->login($_POST["user"], $_POST["pass"]) === false) {
        $errors[] = "Username or password is incorrect";
    }
    if(empty($errors)) {
        $_SESSION["user"] = $_POST["user"];
        header("Location: index.php");
    }
}

我实际上并没有在任何地方抛出异常。我不知道这个错误意味着什么。我正在运行PHP版本5.2.17

这是我的登录功能,

public function login($user, $pass) {
    $sql = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username` = :user AND `password` = :pass");
    $sql->bindParam(":user", $user);
    $sql->bindParam(":pass", $pass);
    $sql->execute();

    return ($sql->fetchColumn() == 1) ? true : false;
}

索引页面(每个使用session_start,索引页面和登录页面的页面都会出错)

session_start();
if(!isset($_SESSION["user"])) {
    header("Location: login.php");
}else {
    //begin HTML, no more php after this (except the closing bracket)

1 个答案:

答案 0 :(得分:4)

我将会话重命名为“username”而不是“user”,然后它开始工作。我为$ user调用了我的用户类,所以当我尝试将会话命名为相同时,我猜错了。这仍然非常奇怪,因为$ user是一个变量而“user”是一个字符串> _>

无论如何,问题已经解决了,谢谢PHP有时候会很愚蠢。

<强>更新

整个时间的罪魁祸首是PHP.ini中的register_globals。它在我的本地服务器上已关闭,但在我的主机上已打开。

现在它已经关闭,无处不在。我想我可能会添加这个,以防将来遇到这个问题。