【问题标题】:Fatal error: Uncaught Error: Call to a member function prepare() on null [C:\xampp\htdocs\twitter\core\classes\user.php on line 19]致命错误:未捕获的错误:调用 null 上的成员函数 prepare() [C:\xampp\htdocs\twitter\core\classes\user.php 第 19 行]
【发布时间】:2020-08-30 04:06:43
【问题描述】:

登录时,弹出此错误。

致命错误:未捕获的错误:在 C:\xampp\htdocs\twitter\core\classes\user.php:19 调用成员函数 prepare() on null 堆栈跟踪:#0 C:\xampp\htdocs\ twitter\includes\login.php(17): 用户->login('user@email.com', 'passwordofuser') #1 C:\xampp\htdocs\twitter\index.php(59): include('C :\xampp\htdocs...') #2 {main} 在第 19 行的 C:\xampp\htdocs\twitter\core\classes\user.php 中抛出

我是 PHP 的初学者,正在尝试通过将“输入”的电子邮件和密码连接到 SQL DATABASE 来验证它。如果数据库中没有电子邮件或密码,我想显示“错误”消息。 这是user.php。
错误在第 19 行。

 $stmt = $this->pdo->prepare("SELECT `user_id` FROM `users` WHERE `email` = :email AND `password` = :password");

用户.php

    <?php
class User
{
    protected $pdo;
    
    function _construct($pdo)
    {
        $this->pdo = $pdo;
    }
    public function checkInput($var)
    {
        $var = htmlspecialchars($var);
        $var = trim($var);
        $var = stripcslashes($var);
        return $var;
    }
    public function login($email, $password)
    {
        $stmt = $this->pdo->prepare("SELECT `user_id` FROM `users` WHERE `email` = :email AND `password` = :password");
        $stmt->bindParam(":email", $email, PDO::PARAM_STR);
        $stmt->bindParam(":password",md5($password), PDO::PARAM_STR);
        $stmt->execute();
        
        $user = $stmt->fetch(PDO::FETCH_OBJ);
        $count = $stmt->rowCount();
        
        if($count > 0)
        {
            $_SESSION['user_id'] = $user->user_id;
            header('Location: home.php');
        }
        else
        {
            return false;
        }
    }
}
?>

现在,这是我的连接.php

<?php
    $dsn  = 'mysql:host=localhost; dbname=tweety';
    $user = 'root';
    $pass = '';
    
    try
    {
        $pdo = new PDO($dsn, $user, $pass);
    }
    catch(PDOException $e)
    {
        echo 'Connnection error! ' . $e->getMessage();
    }
?>

这里是 login.php

我知道以前有人问过这个问题,但我无法帮助自己找到解决方案。任何帮助将不胜感激。
我尝试了什么:

  1. 尝试检查 connection.php 中的拼写错误
  2. 尝试从 XAMPP 重新启动我的 SQL 服务器。
  3. 尝试引用其他"stackoverflow" questions.

【问题讨论】:

  • 添加这一行 $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );在 $pdo 之后的 connection.php 中,然后查看
  • @ArifulIslam I did what you said 但仍然出现完全相同的错误,但我非常感谢您的建议兄弟。
  • 现在也添加这一行 $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  • 你在哪里调用了你的用户类来访问方法?

标签: php pdo


【解决方案1】:

user.php 将 _construct 重命名为 __construct。现在构造函数没有被执行,所以 pdo 变量将保持为空。

【讨论】:

    【解决方案2】:

    添加以下行以在 connection.php

    中捕获您的确切错误
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); 
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 
    

    这将显示您的详细信息错误异常(如果有)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2020-03-11
    相关资源
    最近更新 更多