【问题标题】:Fatal error: Exception thrown without a stack frame in Unknown on line 0, session_start致命错误:在第 0 行 session_start 的 Unknown 中抛出没有堆栈帧的异常
【发布时间】:2013-01-16 22:23:06
【问题描述】:

另一个更新! 2/2/13 将 PHP 更新到 5.3 版,现在它给了我这个消息,

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

但是,我没有使用序列化或反序列化功能...

更新!

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

$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 = true,除 1 = false)。

我正在使用 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)

【问题讨论】:

  • 为什么不使用 try-catch ?并通过 getMessage() 查看错误?
  • 是什么让您认为这会有所帮助?该代码正在工作,它连接到数据库,它检查输入的用户名和密码是否正确,它设置会话,如果会话未设置,它会重定向。总而言之,它运行良好,只是它无缘无故地给了我这个错误。
  • 你升级mysql版本了吗?
  • 我正在运行 MySQL 5.5.23-55 版本。这与会话有关,因为当未设置会话时,我不会收到错误消息。
  • 更多代码会有所帮助。

标签: php mysql session exception pdo


【解决方案1】:

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

不管怎样,问题已经解决了,谢谢PHP有时比较笨。

更新

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

不过现在到处都关闭了。我想我可能会添加这个,以防将来遇到这个问题。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 2011-07-23
    • 2012-05-16
    • 2011-06-05
    • 2011-04-09
    • 1970-01-01
    • 2015-02-21
    • 2017-08-24
    相关资源
    最近更新 更多