另一個更新! 13年2月2日 更新PHP 5.3版本,它現在給了我這個消息,致命錯誤:異常拋出,未知堆棧幀在未知的第0行,session_start
致命錯誤:未捕獲的異常「PDOException」有消息[無活動文件]「你不能序列化或反序列化PDO實例」: 0堆棧軌跡:#0 [內部函數]:PDO - > __ sleep()#1 {main}在第0行拋出[no active file]
但是,我沒有使用serialize或unserialize函數.. 。
更新!
這是有效的,但它是不正確和醜陋的做法。而且我不希望像這樣做,但我想,這可能有助於
$db = new PDO("mysql:host=127.0.0.1;dbname=dbname;", "user", "pass");
public function login($user, $pass) {
global $db;
//stuff
}
原帖
我只是切換我的項目文件到我的虛擬主機(它完美本地)。
我得到這個錯誤,致命錯誤:沒有異常堆棧幀扔在未知在線0
它是如此有幫助的。我現在只包括一個文件,它是一個具有一個函數的類,它可以計算輸入的用戶名和密碼的ID,然後根據它找到的內容返回true或false。 (1 =真,除1 =假外)。
我使用的PDO(MySQL的),如果我不連接到我的數據庫,我不明白的錯誤,但如果我刪除的session_start();從我的文檔頂部我也沒有得到錯誤。 private $ 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();
if(!isset($_SESSION["user"])) {
header("Location: login.php");
}else {
//begin HTML, no more php after this (except the closing bracket)
爲什麼不使用try-catch?並通過getMessage()查看錯誤? –
是什麼讓你覺得這會有所幫助?代碼正在工作,它連接到數據庫,它檢查輸入的用戶名和密碼是否正確,它設置會話,如果未設置會話,它會重定向。總而言之,它的運作非常完美,除非它無論如何都給了我這個錯誤。 – Andreas
你升級了mysql版本嗎? –