所以我已经编程了一段时间并决定学习OOP。我为数据库连接创建了这个类,我不确定这是浪费代码还是做事的好方法。我仍然不觉得我理解OOP那么多,但我会到达那里只是练习。我想我的目标实际上是尽可能多地将数据库连接保存到类中,并让类完成所有清理工作,如mysqli_close();.
class db {
private $db_user;
private $db_pass;
private $db_host;
private $db_name;
private $link;
private $db_error;
public function escape($string) {
return mysqli_real_escape_string($this->link, $string);
}
public function query($query) {
return = mysqli_query($this->link, $query);
}
function __construct() {
$this->db_error = 'Database Error';
$this->db_user = 'root';
$this->db_pass = '';
$this->db_host = 'localhost';
$this->db_name = 'test';
$this->link = mysqli_connect($this->db_host, $this->db_user, $this->db_pass) or die($this->db_error);
mysqli_select_db($this->link, $this->db_name) or die($this->db_error);
}
function __destruct() {
mysqli_close($this->link);
}
}
编辑: 谢谢你的答案,我将学习PDO。
答案 0 :(得分:4)
它本身并不是错误,除非因为它不支持准备好的陈述,因此可以利用,但它也不是花费你的时间的有用的东西; PHP's PDO class是您要搜索的轮子。
答案 1 :(得分:0)
我认为这是一个好主意。最好将所有数据库功能封装在一个类中。
一些建议:
答案 2 :(得分:0)
我想对你的问题发表评论,但没有足够的声誉,所以我只想指出我的想法作为答案。
你实际上在做的是尝试编写一个包装器 - 这绝对没问题。但正如其他人所指出的那样,最好包装PDO函数,因为它们提供预处理语句来处理任何SQL注入尝试,并且将来完全支持。
我看到的另一个问题是您正在初始化并将MySQL登录凭据存储在对象内部。由于它们现在位于内存中,因此可以显示此信息并进行检索。
我建议您将MySQL登录信息存储在配置文件中,例如(.ini),并在调用mysqli_connect()函数时将其读入。不要将此数据存储在类成员变量中。
如果您决定将登录信息存储为本地变量(可能是为了使代码更清晰,使用有意义的变量名称),请确保在调用mysqli_connect()后将其清空。