似乎我的$ 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的范围内吗?