簡體   English   中英

致命錯誤:調用未定義的方法connectDB :: prepare()

[英]Fatal error: Call to undefined method connectDB::prepare()

我嘗試使用類connectDB連接到MySQL數據庫來做一個簡單的CRUD。 然后,當我嘗試執行RecipesModel類的delRecipe方法時,系統顯示錯誤。

致命錯誤:調用未定義的方法connectDB :: prepare()

調用方法prepare()的正確方法是嗎? 為什么不被認可?

這是connectDB的代碼(文件connectDB.php)

class connectDB {

    private $address='localhost';
    private $db_name='db-name';
    private $user='root';
    private $pswd='psswd';

    private $sql;

    public function __construct() {
        $this->sql = new mysqli($this->address,$this->user,$this->pswd,$this->db_name);
        if (mysqli_connect_error()) {
            die('Error de Conexion: '. mysqli_connect_errno().' - '.mysqli_connect_error());
        }
        return $this->sql;
    }

    public function __destruct() {
        if(!mysqli_close($this->sql)) {
            die('ERROR!:'.$this->sql->error);
        }
    }

    public function execute($query) {
        $res = $this->sql->query($query);
        if ($res) {
            return $res;    
        }
        else {
            die('ERROR!:'.$this->sql->error);
        }
    }
}

和刪除行的類。

<?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);

?>

您的誤解是:

    return $this->sql;

您無法在構造函數中return選擇的內容。 構造函數返回的值始終是該類的對象實例。

connectDB沒有一個調用的方法prepare()

您可能正在嘗試調用$this->db->sql->prepare() ,因為在connectDB您將實際的數據庫連接存儲在$this->sql 但是,由於$sql屬性是private ,所以您不能這樣做。

您需要將$sqlpublic屬性,或者在connectDB類中創建一個方法以充當代理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM