我实际上想知道为什么我需要PHP的数据库包装器。像MySQLi或PDO的包装器。它是调用PDO / MySQLi类的类。我为什么需要它?好处?我会尝试制作一个 - 只是我没有得到主要目标。我为什么需要它? =]
答案 0 :(得分:3)
我至少可以想到两个原因:
1)重构。技术会发生变化,因此您应该努力将所需的更改本地化(以便快速且无风险地进行)。几年前你没有MySQLi或PDO。如果您已经开发了经典MySQL扩展的包装器,您可以轻松切换到PDO,而无需更改所有包装器客户端。另一方面,取代mysql_connect()
到mysqli_connect()
的数百个电话听起来并不那么吸引人。
2)可测试性。如果您进行自动化测试,添加一个间接层(包装器)意味着您可以轻松地用假的替换它。因此,您可以控制查询是否真正进入数据库,或者,例如,是否记录到文件。结果是更快,更易于管理的测试。
答案 1 :(得分:1)
像PDO
这样的抽象意图使事情变得更加安全。你可以说你想要做的数据库执行将是“强类型”,这意味着这样的事情将被阻止:
$myDangerousSql = "select * from dbA where x ='"+$someVariable+"'";
上述内容可能会导致sql-injection。
使用PDO
时,您明确说“x将是字符串类型”或您在数据库中使用的任何类型。通过这种方式,语句可以“准备”,因此您无法“注入”新的SQL代码。这使它更安全。
这只是其中一个原因,但很可能是最大的原因之一。如果不是为了学习目的,不要编写自己的包装/抽象,那里已经有很多好的。
这是一篇关于Database abstraction in PHP的好文章。
答案 2 :(得分:0)
我不清楚你在这里问的是什么。但我认为PDO已经是你所说的,它是"data-access abstraction layer",这意味着你可以使用相同的代码与各种DBMS交谈,并且可以轻松地在它们之间切换,而无需更改代码(为您提供使用与你要切换的内容兼容的SQL。
MySQLi是用于直接访问MySQL数据库的扩展,还有Oracle和其他DBMS的扩展。
答案 3 :(得分:0)
如果你打算在PDO之上使用一个包装器,不要写一个,已经写了很多。你有Doctrine,ActiveRecord,Zend_Db,可能还有更多。