【发布时间】:2017-06-10 19:35:46
【问题描述】:
我尝试使用 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);
?>
【问题讨论】:
-
您的 DBConnect 类中没有
prepare方法!!!! -
MYSQLI 扩展有一个非常好的 OO 访问方法。您只会使尝试重新包装自己的事情复杂化
-
这是一条免费的建议:停止为连接抽象制作包装器。他们毫无意义。另外,请阅读有关依赖注入的信息。哦..不要称他们为“模特”。你所拥有的只是active record 的即兴创作。