当前位置: 首页 > 知识库问答 >
问题:

致命错误:未捕获错误:调用一个成员函数准备()在null[C:\xampp\htdocs\twitter\core\class\user.php在第19行]

公冶经纶
2023-03-14

登录时,会弹出此错误。

致命错误:未捕获错误:在C:\xampp\htdocs\twitter\core\classes\user.php:19堆栈跟踪:#0 C:\xampp\htdocs\twitter\includes\login.php(17):user中调用null上的成员函数prepare()-

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

 $stmt = $this->pdo->prepare("SELECT `user_id` FROM `users` WHERE `email` = :email AND `password` = :password");
    <?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();
    }
?>

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

  1. 已尝试检查connection.php中的键入错误
  2. 尝试从XAMPP重新启动我的SQL server。
  3. 尝试引用其他“stackoverflow”问题

共有2个答案

松雅健
2023-03-14

添加以下行以捕获connection.php中的确切错误

$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); 
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 

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

单琛
2023-03-14

user.php中将u构造重命名为u构造。现在没有执行构造函数,因此pdo变量将保持为空。

 类似资料:
  • 我试图了解PDO的来龙去脉,但我却走进了这堵砖墙。 我目前的PDO课程如下: 我有其余的函数,但对于这个错误,我认为没有必要向您展示其余的函数。 然后我这样调用函数: 我得到了以下错误:致命错误:在null上调用成员函数准备(),当我调用准备函数时会发生这种情况。知道为什么会发生这种情况以及我如何解决这个问题吗?

  • 这是三个文件 我得到一个错误“Fatal error:Uncattle error:Call to a member function prepare()on null”。这段代码运行在我的localhost上没有问题,但是当它上传到服务器时,我就出现了这个问题。我在本地使用PHP8和xammp软件。我是三年级学生,请帮帮我。 文件database.php: } 文件admin.php

  • 我问了几个问题,但没有人帮忙。 致命错误:在中的布尔值上调用成员函数bind_param()- 我在PDO中使用PHP5和mySql: 连接和选择工作正常,但插入不想工作 这就是我的功能: 数据库模式是: id(int not null auto_inc)|昵称(varchar not null)|电子邮件(varchar not null)| insertdate(datetime)| upda

  • 我收到WordPress发来的关于致命错误的消息。它与WPML字符串翻译插件后端中的特定页面相关。我认为有一个特别的翻译: 访问发现错误的页面(xxxxxxxx/wp admin/admin.php?page=wpml translation management/menu/translations-queue.php) 它还说 错误详细信息===========在文件/nas/content/l

  • 问题内容: 我正在尝试检查注册中是否已使用电子邮件。当我在学校工作时,它运行良好,但现在突然显示出一个错误: 致命错误:在null上调用成员函数prepare() 我用这个包括 在这里 问题答案: 编辑:( 我想通了)。 我终于弄清楚了为什么您的代码无法正常工作,而我原来的答案已不再适用,我已将其剔除掉。 连接不起作用的原因是因为您从连接参数中省略了常量。 即使您可能没有设置密码,也仍然需要将其作