OOP错误调用非对象中的成员函数insertName()

时间:2013-04-17 17:25:06

标签: php oop pdo

您好我已经制作了一个快速代码,可以将名称插入数据库。

这是数据库连接的类:

(我隐藏密码等,基本上我将它们定义在顶部)

class Database
{
    private $pdo;
    private $query;
    public function __construct()
    {
        try
        {
            $this->pdo = new PDO('mysql:host='.MYSQL_HOST.';dbname=oop', MYSQL_USER, MYSQL_PASSWORD);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo 'Sucessfully connected to MySQL server!';
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    public function query($name)
    {
        $this->query = $this->pdo->prepare("INSERT INTO user (name) VALUES (:name)");
        $this->query->bindValue(":name", $name);
        $this->query->execute();
        echo 'Sucessfully send!';
    }
}

这是我基本上使用查询并从中处理它们的类:

class System
{
    private $Database;

    public function __construct(Database $Database = null)
    {
        $this->Database = $Database;
    }

    public function insertName($name)
    {
        if ($this->db != null)
        {
            $this->db->query($name);
        }
    }
}

这是config.php

include("system.class.php");
include("db.class.php");

$system = new System($Database);
$db = new Database();

这是index.php

<?php

include("config.php");

?>

<html>
<form action="" method="post">
<input type="text" name="name">
<input type="submit">
</form>

<?php

    if (isset($_POST) && !empty($_POST['name']))
    {
        $Database->insertName($_POST['name']);
        echo 'Scessfuly inserted!';
    }
?>
</html>

问题:

发送数据时(提交表单后)我收到以下错误:

致命错误:在第17行的C:\ xampp \ htdocs \ oop \ index.php中的非对象上调用成员函数insertName()

我做错了什么?这是第17行:

    $Database->insertName($_POST['name']);

我该如何解决这个问题?问题是什么?

Thnaks。

将它从$ db更改为类的实际名称后,我得到了这个:

在第17行的C:\ xampp \ htdocs \ oop \ index.php中调用未定义的方法Database :: insertName()

编辑:

if (isset($_POST) && !empty($_POST['name']))
{
    $system->insertName($_POST['name']);
    echo 'Scessfuly inserted!';
}


class System
{
    private $Database;

    public function __construct(Database $Database = null)
    {
        $this->Database = $Database;
    }

    public function insertName($name)
    {
        if ($this->Database != null)
        {
            $this->Database->query($name);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

看起来你有两个问题。第一个是,您尝试在未定义的变量上调用方法。在config.php中,您将Database对象定义为$db,而不是$Database。其次,方法insertName()在课程System而非Database中定义。

尝试将行更改为$system->insertName($_POST['name'])

答案 1 :(得分:1)

我引用:

$db = new Database();

为什么在调用变量$Database时使用$db

使用:

$db->insertName($_POST['name']);

在TO编辑问题之后:

方法insertName位于System类中。因此,请使用$system->insertName(...);