【问题标题】:Fatal error: Uncaught Error: Call to a member function connect() on null in C:\xampp\htdocs\oophp\Home.php致命错误:未捕获的错误:在 C:\xampp\htdocs\oophp\Home.php 中调用 null 上的成员函数 connect()
【发布时间】:2017-08-19 12:33:52
【问题描述】:

我尝试将我的数据库与我的 php 代码链接,它已完成,但尝试将信息发送到我的数据库,但它返回了错误我通过创建一个对象并调用类的方法来尝试它,但它返回了错误在这一行中,我认为调用函数时存在问题,但无法理解错误,甚至尝试谷歌搜索但无法解决问题

致命错误:未捕获的错误:在 C:\xampp\htdocs\oophp\Home.php:15 中调用成员函数 connect() 堆栈跟踪:#0 C:\xampp\htdocs\oophp\Home。 php(47): Home->__construct('example', 'example123', 'example8@gmail....') #1 {main} 在第 15 行的 C:\xampp\htdocs\oophp\Home.php 中抛出

Connect.php 中的代码是

<?php
class Connect
{

protected $connection;

public function __construct()
{

}
public function connect(){
    try
    {
        $this->connection = new 
PDO('mysql:host=localhost;dbname=oo;charset=utf8mb4','root','');
        echo "connected sucessfully";
        return $this->connection;
    }
    catch(PDOException $e)
    {
        echo "connection failed : " . $e->getMessage();
    }
}
} 
?>

Home.php 中的代码是

<?php
require_once __DIR__ . '\Connect.php'; 
class Home extends Connect{
protected $user = array();
protected $var0;
protected $response = array();
protected $username;
protected $password;
protected $email;
protected $var1;

public function __construct($username , $password ,$email)
{
    $var0 = new Connect();
    $var1 = $this->var0->connect();
    $this->username = $username;
    $this->password = $password;
    $this->email = $email;
}
public function Insert()
{
    try
    {
        global $var1;
        $insert = $this->var1->prepare("INSERT INTO person 
        (username,password,email) VALUES (:username,:password,:email)");
        $insert->bindParam(':username',$this->username);
        $insert->bindParam(':password',$this->password);
        $insert->bindParam(':email',$this->email);
        $insert->execute();
    }
    catch(PDOException $e)
    {
        echo $e;
    }
        if(row_Count($insert)>0)
        {
            $this->response["status"] = 1;
            echo "Sucessfully inserted to database";
        }
        else
        {
            $this->response["status"] = 0;
            echo "there is a error in inserting";
}
}
}
$dfg  = new Home("example","example123","example8@gmail.com");
$dfg->Insert();
?>

我找不到问题,但我认为 connect() 函数有错误,感谢您的帮助

【问题讨论】:

  • 在您尝试使用它之前,您永远不会定义$this-&gt;var0。将$var0 = new Connect(); 更改为$this-&gt;var0 = new Connect();。对构造函数中的$var1 执行相同操作,并删除Insert()-方法中的global $var1
  • 建议,让您的属性和变量名称具有描述性。不要使用通用名称,如$var0$var1 等。稍后您会感谢我的。

标签: php oop pdo


【解决方案1】:

更改您的 __construct 并删除 global $var1;

public function __construct($username , $password ,$email)
{
    $this->var0 = new Connect();
    $this->var1 = $this->var0->connect();
    $this->username = $username;
    $this->password = $password;
    $this->email = $email;
}

【讨论】:

  • 但我认为是否需要将变量传递给构造函数?
  • 如果不需要,不需要在构造函数中传递变量
  • 我尝试了 Magnus Eriksson 的上述答案并得到了答案谢谢您的回复
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 2020-10-04
  • 2016-04-20
  • 2020-08-24
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多