Php 致命错误:在第0行“会话\u开始”的“未知”中,在没有堆栈帧的情况下引发异常
另一个更新!2013年2月2日 将PHP更新为5.3版,现在它给了我以下信息 致命错误:在[no active file]:0堆栈跟踪:#0[internal function]:PDO->u sleep()#1{main}在第0行的[no active file]中抛出消息“无法序列化或取消序列化PDO实例”的未捕获异常“PDOException” 但是,我没有使用序列化或取消序列化函数 更新强> 这是可行的,但这是最不正确、最丑陋的做法。我不想这样做,但我想这可能会有帮助Php 致命错误:在第0行“会话\u开始”的“未知”中,在没有堆栈帧的情况下引发异常,php,mysql,session,exception,pdo,Php,Mysql,Session,Exception,Pdo,另一个更新!2013年2月2日 将PHP更新为5.3版,现在它给了我以下信息 致命错误:在[no active file]:0堆栈跟踪:#0[internal function]:PDO->u sleep()#1{main}在第0行的[no active file]中抛出消息“无法序列化或取消序列化PDO实例”的未捕获异常“PDOException” 但是,我没有使用序列化或取消序列化函数 更新 这是可行的,但这是最不正确、最丑陋的做法。我不想这样做,但我想这可能会有帮助 $db = ne
$db = new PDO("mysql:host=127.0.0.1;dbname=dbname;", "user", "pass");
public function login($user, $pass) {
global $db;
//stuff
}
原创帖子
我刚刚将我的项目文件切换到我的web主机(它在本地工作得非常好)
我得到了这个错误,致命错误:在第0行的未知中没有堆栈帧而引发异常
这真是太有用了。我现在只包含一个文件,它是一个带有一个函数的类,计算输入的用户名和密码的ID,然后根据找到的内容返回true或false。(1=正确,除1=错误外的任何内容)
我使用的是PDO(mysql),如果我没有连接到我的数据库,我不会得到错误,但是如果我删除会话_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;
}
索引页(在使用会话启动、索引页和登录页的每个页面上都会发生错误)
我将会话重命名为“username”而不是“user”,然后它开始工作。我为$user调用了我的用户类,所以我想当我试图为会话命名时,出现了严重的错误。这仍然非常奇怪,因为$user是一个变量,“user”是一个字符串>\u>
不管怎么说,问题已经解决了,谢谢你们有时候表现得相当愚蠢
更新
这段时间的罪魁祸首是PHP.ini中的register_globals。它在我的本地服务器上已关闭,但在我的主机上已打开
不过现在到处都关掉了。我想我可能会添加这个,以防将来遇到这个问题。我将会话重命名为“username”而不是“user”,然后它开始工作。我为$user调用了我的用户类,所以我想当我试图为会话命名时,出现了严重的错误。这仍然非常奇怪,因为$user是一个变量,“user”是一个字符串>\u>
不管怎么说,问题已经解决了,谢谢你们有时候表现得相当愚蠢
更新
这段时间的罪魁祸首是PHP.ini中的register_globals。它在我的本地服务器上已关闭,但在我的主机上已打开
不过现在到处都关掉了。我想我可能会添加此选项,以防将来遇到此问题。为什么不使用try-catch?并通过getMessage()查看错误?是什么让您认为这会有帮助?代码正在工作,它连接到数据库,它检查输入的用户名和密码是否正确,它设置会话,如果未设置会话,它将重定向。总而言之,它工作得很好,只是它毫无理由地给了我这个错误。你升级了mysql版本吗?我运行的是mysql的5.5.23-55版本。这与会话有关,因为当未设置会话时,我不会得到错误。多些代码会有所帮助。为什么不使用try-catch?并通过getMessage()查看错误?是什么让您认为这会有帮助?代码正在工作,它连接到数据库,它检查输入的用户名和密码是否正确,它设置会话,如果未设置会话,它将重定向。总而言之,它工作得很好,只是它毫无理由地给了我这个错误。你升级了mysql版本吗?我运行的是mysql的5.5.23-55版本。这与会话有关,因为当会话未设置时,我不会出现错误。多些代码会有所帮助。
session_start();
if(!isset($_SESSION["user"])) {
header("Location: login.php");
}else {
//begin HTML, no more php after this (except the closing bracket)