0

別のアップデート!2013年2月2 日PHPをバージョン5.3に更新すると、次のメッセージが表示されます。

致命的なエラー:キャッチされない例外'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
}

元の投稿

プロジェクトファイルをWebホストに切り替えました(ローカルで完全に機能します)。

このエラーが発生します。致命的なエラー:0行目の不明でスタックフレームなしで例外がスローされました。

とても助かります。現在、ファイルを1つだけ含めています。これは、入力されたユーザー名とパスワードのIDをカウントし、検出された内容に応じてtrueまたはfalseを返す1つの関数を持つクラスです。(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)
4

1 に答える 1

5

セッションの名前を「ユーザー」ではなく「ユーザー名」に変更すると、機能し始めました。$user のユーザー クラスを呼び出したので、セッションに同じ名前を付けようとしたときに、何かがひどく間違っていたと思います。$user は変数であり、"user" は文字列であるため、これはまだひどく奇妙です >_>

とにかく、問題は解決されました。PHP さん、時々おバカなことをしてくれてありがとう。

アップデート

この全体の原因は、PHP.ini の register_globals でした。ローカルサーバーではオフになっていましたが、ホストではオンになりました。

しかし、今はどこでもオフになっています。将来この問題が発生した場合に備えて、これを追加する可能性があると思いました。

于 2013-02-02T01:01:04.787 に答える