PDO的范围,错误:在null上调用成员函数prepare()

时间:2017-10-23 06:23:33

标签: php mysql variables pdo scope

似乎我的$ pdo由于某种原因超出了范围,因为它返回null但是当我将函数代码块移到函数之外时它才起作用。

db.php中

<?php

$host = 'localhost';
$db = 'phpcms';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    PDO::ATTR_ERRMODE       =>  PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE    =>  PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES      =>  false,  
];

$pdo = new PDO($dsn, $user, $pass, $opt);

的functions.php

<?php require_once("include/db.php"); ?>
<?php require_once("include/sessions.php"); ?>
<?php  

    function redirect_to($New_Location)
    {
        header("location:".$New_Location);
        exit();
    }

    function login_Attempt($Username, $Password)
    {
        $Query = $pdo->prepare('SELECT * FROM registration WHERE username=? AND password=?');
        $Query ->execute([$username, $password]);
        if($admin = $Query -> fetch())
        {
            $_SESSION['User_Id']=$admin['id'];
            $_SESSION['Username']=$admin['username'];
            $_SESSION['SuccessMessage']="Welcome Back, {$_SESSION['Username']}";
            redirect_to("dashboard.php");
        }
        else{
            $_SESSION['ErrorMessage']="Incorrect Username and Password Combination!";   
            redirect_to("login.php");           
        }
    }

?>

的login.php

<?php require_once("include/db.php"); ?>
<?php require_once("include/sessions.php"); ?>
<?php require_once("include/functions.php"); ?>
<?php  

    if(isset($_POST['Submit'])){

        $username               =   $_POST['Username'];
        $password               =   $_POST['Password'];

        if(empty($username) || empty($password))
        {
            $_SESSION['ErrorMessage']="All fields must be filled out!";
        } 
        else 
        {
            $user = login_Attempt($username, $password);
            //$Query = $pdo->prepare('SELECT * FROM registration WHERE username=? AND password=?');
            //$Query ->execute([$username, $password]);

            //if($admin=$Query -> fetch())
            //{
            //  $_SESSION['User_Id']=$admin['id'];
            //  $_SESSION['Username']=$admin['username'];
            //  $_SESSION['SuccessMessage']="Welcome Back, {$_SESSION['Username']}";
            //  redirect_to("dashboard.php");
            //}
            //else{
            //  $_SESSION['ErrorMessage']="Incorrect Username and Password Combination!";               
            //}
        }
    }
?>

如果我删除注释掉的代码一切正常,但是当我尝试使用login_Attempt函数时,它会给出错误&#34;在null&#34;上调用成员函数prepare()。在login_Attempt函数声明的位置并不重要,我首先在functions.php中尝试,然后我尝试将方法移动到login.php,但仍然有相同的错误。

由于首先插入db.php,不应该将functions.php放在pdo的范围内吗?

0 个答案:

没有答案