Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:调用未定义的方法connectDB::prepare()_Php_Mysql_Mysqli - Fatal编程技术网

Php 致命错误:调用未定义的方法connectDB::prepare()

Php 致命错误:调用未定义的方法connectDB::prepare(),php,mysql,mysqli,Php,Mysql,Mysqli,我尝试使用一个类connectDB来连接一个MySQL数据库,以实现一个简单的CRUD。然后,当我尝试执行RecipesModel类的方法delRecipe时,系统会显示一个错误 致命错误:调用未定义的方法connectDB::prepare() 调用方法prepare()是否正确?为什么不被承认 下面是connectDB的代码(文件connectDB.php) 以及删除该行的类 <?php require_once('connectDB.php'); class RecipesMode

我尝试使用一个类connectDB来连接一个MySQL数据库,以实现一个简单的CRUD。然后,当我尝试执行RecipesModel类的方法delRecipe时,系统会显示一个错误

致命错误:调用未定义的方法connectDB::prepare()

调用方法prepare()是否正确?为什么不被承认

下面是connectDB的代码(文件connectDB.php)

以及删除该行的类

<?php
require_once('connectDB.php');

class RecipesModel {

    private $db;

    public function __construct() {
        $this->db = new connectDB();
    }

    public function delRecipe($id) {
        if (is_numeric($id)) {
            $sql = 'DELETE FROM t_platos WHERE ID_pl= ?';
            $this->db->prepare($sql);
            return $this->db->execute(array($id));
        }
    }
}

$recipe = new RecipesModel();
$res = $recipe->delRecipe(1);

?>

您的
connectDB
类没有名为
prepare()
的方法

您可能试图调用
$this->db->sql->prepare()
,因为在
connectDB
中,您将实际的数据库连接存储到
$this->sql
中。但是,由于
$sql
属性是
private
,因此不能这样做


您需要将
$sql
设置为
公共属性
,或者在
connectDB
类中创建一个方法作为代理。

您的误解是:

    return $this->sql;

您不能
在构造函数中返回您选择的内容。构造函数返回的值始终是该类的对象实例。

DBConnect类中没有
prepare
方法!!!!MYSQLI扩展有一个非常好的OO访问方法。你只会使事情复杂化,试图用你自己的方式重新包装。这里有一条免费的建议:停止为连接抽象制作包装。它们毫无意义。另外,请阅读有关依赖项注入的内容。哦不要叫他们“模特”。你有的只是即兴表演。
    return $this->sql;