Php 为什么要制作数据库包装器?

Php 为什么要制作数据库包装器?,php,database,pdo,wrapper,Php,Database,Pdo,Wrapper,我真想知道为什么我需要PHP的数据库包装器。比如MySQLi或PDO的包装器。这个类调用PDO/MySQLi类。为什么我需要它?优势?我会努力做到这一点,只是我没有达到主要目标。我为什么需要它??=] 我不清楚你在问什么。但我假设PDO已经是您所谈论的内容,这意味着您可以使用相同的代码与各种DBM进行对话,并且可以轻松地在它们之间切换,而无需更改代码(前提是您使用的SQL与您正在切换的代码兼容) MySQLi是用于直接访问MySQL数据库的扩展,还有针对Oracle和其他DBMS的扩展。像PDO

我真想知道为什么我需要PHP的数据库包装器。比如MySQLi或PDO的包装器。这个类调用PDO/MySQLi类。为什么我需要它?优势?我会努力做到这一点,只是我没有达到主要目标。我为什么需要它??=]

我不清楚你在问什么。但我假设PDO已经是您所谈论的内容,这意味着您可以使用相同的代码与各种DBM进行对话,并且可以轻松地在它们之间切换,而无需更改代码(前提是您使用的SQL与您正在切换的代码兼容)


MySQLi是用于直接访问MySQL数据库的扩展,还有针对Oracle和其他DBMS的扩展。

PDO
这样的抽象旨在使事情更加安全。您可以说您想要执行的数据库将是“强类型”的,这意味着类似这样的操作将被阻止:

$myDangerousSql=“从dbA中选择*,其中x=”+$someVariable+”

上述情况可能会导致一种被称为

当使用
PDO
时,您明确表示“x将是string类型”或您在数据库中使用的任何类型。通过这种方式,可以“准备”语句,因此不能“注入”新的SQL代码。这使它更安全

这只是其中一个原因,但很可能是最大的原因。不要编写自己的包装器/抽象,如果不是为了学习,已经有很多好的包装器/抽象了


这是一篇很好的帖子。我至少可以想到两个原因:

1) 重构。技术变更,因此您应该努力将所需的变更本地化(以便快速且无风险地进行)。几年前你还没有MySQLi或PDO。如果您已经为经典的MySQL扩展开发了一个包装器,那么您就可以轻松地切换到(比如)PDO,而不必更改所有的包装器客户端。另一方面,替换从
mysql\u connect()
mysqli\u connect()
的数百个调用听起来并不那么吸引人


2) 可测试性。如果您练习自动测试,添加一层间接层(包装器),意味着您可以很容易地用一个假的替代它。因此,您可以控制查询是否真正进入数据库,或者(例如)记录到文件中。结果是更快、更易于管理的测试。

如果要在PDO上使用包装器,不要编写,已经编写了很多。你有条令、ActiveRecord、Zend_Db,可能还有更多


PDO已经是一个包装器了。你可以扩展这个类来添加一些你需要的东西,但是没有提供,但是,从头开始构建你自己的包装器是一个相当大的任务。谢谢你的回答,但是我已经有了一个答案。看看上面。=]是的,我刚开始的时候还没有!