0

Another Update! 2/2/13 Updated PHP to version 5.3 and it now gives me this message,

Fatal error: Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDO instances' in [no active file]:0 Stack trace: #0 [internal function]: PDO->__sleep() #1 {main} thrown in [no active file] on line 0

However, I'm not using the serialize or unserialize function...

Update!

This works, but it is the incorrect and ugliest way of doing it. And I don't want to do it like this, but I figured that it might help

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

ORIGINAL POST

I just switched over my project files to my web host (it works perfectly locally).

I'm getting this error, Fatal error: Exception thrown without a stack frame in Unknown on line 0.

It is oh so helpful. I am only including one file right now, it's a class with one function which counts the IDs of the entered username and password and then either returns true or false depending on what it found. (1 = true, anything but 1 = false).

I'm using PDO (mysql), and if I don't connect to my database I don't get the error but if I remove the session_start(); from the top of my document I also don't get the error. 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); } 

And this is where I set the session,

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

I am not actually throwing an exception, anywhere. I don't know what this error means. I am running PHP Version 5.2.17

Here is my login function,

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

Index page (error occurs on every page that uses session_start, index page and login page)

session_start(); if(!isset($_SESSION["user"])) { header("Location: login.php"); }else { //begin HTML, no more php after this (except the closing bracket) 
8
  • why not use try-catch ? and see error by getMessage() ? Commented Feb 1, 2013 at 15:10
  • What makes you think that would be helpful at all? The code is working, it connects to the database, it checks if the username and password entered is correct, it sets the session, it redirects if the session isn't set. All in all, it's working perfectly except it's giving me that error for no reason whatsoever. Commented Feb 1, 2013 at 15:23
  • did you upgraded mysql version ? Commented Feb 1, 2013 at 15:38
  • I am running version 5.5.23-55 of MySQL. This has something to do with sessions, because when the sessions isn't set, I don't get the error. Commented Feb 1, 2013 at 16:25
  • A bit more code would help. Commented Feb 1, 2013 at 18:45

1 Answer 1

5

I renamed the session to "username" instead of "user" and then it started working. I called my user class for $user so I guess something went terribly wrong when I tried to name a session the same. Which is still terribly weird because $user is a variable and "user" is a string >_>

Anyways, problem has been resolved, thank you PHP for being rather dumb sometimes.

Update

The culprit this entire time was register_globals in the PHP.ini. It was turned off on my local server but it was turned on, on my host.

It's turned off now though, everywhere. I thought I might add this in case some runs into this problem in the future.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.