【问题标题】:Fatal error: Uncaught Error: Call to undefined method Connection::prepare() [duplicate]致命错误:未捕获的错误:调用未定义的方法 Connection::prepare() [重复]
【发布时间】:2020-02-23 04:31:32
【问题描述】:

我想使用 php oop 类创建一个新数据库,我创建了 2 个类,第一个类仅连接到本地主机,第二个类根据连接类“第一类”在此本地主机中创建数据库

class Connection 
{
    public $conn;

    function __construct() {
        try {

            $this->conn = new PDO('mysql:host=127.0.0.1;charset=utf8', 'root', '');
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        } catch (PDOException $e) {

            die($e->getMessage());

        }
        return $this->conn;
    }
}


class CreateNewDataBase
{
    public $connect;
    function __construct()
    {
        $this->connect = new Connection;

        $sql = 'CREATE DATABASE `startex` CHARACTER SET utf8 COLLATE utf8_general_ci';
        $query = $this->connect->prepare($sql);
        $query->execute();  
        if ($query) echo 'Done Your Database Is Created Successfuly';

    }
}

$newObject= new CreateNewDataBase;

输出是

致命错误:未捕获的错误:调用未定义的方法 Connection::prepare()....CreateNewDataBase->__construct() 在我的 文件浴

【问题讨论】:

  • 你不能从构造函数返回一个值,但它仍然应该设置$conn值,因为它是公共的,你可以使用$this->connect->conn->prepare($sql);

标签: php mysql sql oop pdo


【解决方案1】:

您的Connection 类没有prepare 方法。

当您new创建该类的新实例时,构造函数不会返回您在return 语句中的内容。它用于实例化对象;此时您不是__construct 方法的调用者。

$conn = new Connection;

这是通过引用分配使用new 关键字创建的新对象,而不管构造函数中的任何返回语句。

您可以从 CreateNewDataBase 构造函数内部访问 Connection 类中的 PDO 连接:

$this->connection->conn

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2019-07-19
    相关资源
    最近更新 更多