我目前正在学习使用PHP中的OOP进行编码,并经常遇到数据库类和抽象层。我正在编写CMS作为一项重大挑战,我开始编写数据库类而不用太多考虑它。
我实际上倾向于使用MySQLi(我觉得按原样使用它很好),而不是创建一个处理CRUD操作的类,所以我真的需要一个类来处理所有这些东西吗? / p>
如果没有,那么连接数据库的最佳方式是什么,只需在我的应用程序开始时进行并传递连接?或者编写一个我缺少的数据库类真的有很大的好处吗?
我认为错误处理将是一个这样的好处,但如果我让我的班级尽可能接近MySQLi,这是否足以让我们继续上课?
答案 0 :(得分:7)
主要的好处是,如果您可以获取所有代码来浏览数据库对象。您可以在将来轻松更改数据库实施。你说你正在学习mysqli,但是说你改为PDO的一半,你必须重构 - 所有东西 - 。
使用自定义数据库对象,您只需更改集成,而不会影响其余代码。例如。您的对象 - > connect()函数仍然可以像现在一样完全调用,但底层代码会发生变化,因为它都在您的自定义类中,所以您所做的更改很少。
这只是众多好处之一。与数据库对象接口以运行查询和存储结果的自定义类很常见(MVC的模型部分 - 通常扩展通常称为RecordSet的公共基础对象或具有运行select / update / delete的函数的类似程序) /等等)。同样,您可以轻松地将实现从一种方法更改为另一种方法。
我所描述的是一般的面向对象编程的一个非常普遍的优点。请参阅您的常识的答案以获得另一个好处。
答案 1 :(得分:3)
谢谢你提出的好问题。
PHP OOP数据库类 - 真的需要吗?
肯定是的,但前提是您不喜欢代码中执行的每个查询的重复代码屏幕。
如果你重新审视一下你需要执行一个平均查询的代码,你可能会注意到它的数量太可怕了。虽然您只需要定义一个查询,传递变量,运行它并获得结果,但您必须编写数千个无用的运算符,并为每个查询重复。
手册中的一个示例(即使没有错误处理)
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
$stmt->execute();
$stmt->bind_result($district);
$stmt->fetch();
echo $district;
}
使用数据库助手类的示例:
$district = $db->getOne("SELECT District FROM City WHERE Name=?s", $city);
echo $district;
那只是单行。对于行数组,在使用原始API
的情况下,代码量将加倍如果使用mysqli,情况会变得更糟。
我们举一个简单的例子。想象一下,有一系列未知大小的id。您需要在简单查询
中将它们全部添加到IN语句中SELECT * FROM t WHERE id IN (1,2,3) // filled from array.
尝试使用mysqli预处理语句获取数据