关于PHP开发的一个问题。我正在为计算构建一些表单字段。 Jquery通过ajax计算并将整数值发送到PHP脚本。此脚本从数据库中选择一些值,计算并将值返回到表单域。
现在的问题。我习惯了Mysql,因此我使用PHP Mysql函数来选择值。后来Datasource应该是Postgres SQL。什么是最好的编程方式来独立于数据源。是否有一种设计模式可用于此问题?
的问候,
贝
答案 0 :(得分:4)
您正在寻找的设计模式是Query Object:
表示数据库查询的对象。
SQL可以是一种涉及的语言,许多开发人员并不是特别熟悉它。此外,您需要知道数据库模式形成查询的样子。您可以通过创建隐藏参数化方法中的SQL的专用查找器方法来避免这种情况,但这会使形成更多即席查询变得困难。如果数据库架构发生变化,它还会导致SQL语句重复。
查询对象是interpreter [Gang of Four],即可以将自身组成SQL查询的对象结构。您可以通过引用类和字段而不是表和列来创建此查询。通过这种方式,编写查询的人可以独立于数据库模式执行此操作,并且可以将对模式的更改本地化在一个位置。
使用查询对象时,公共API上根本就没有SQL。将查询对象转换为数据库供应商的相应SQL将在幕后进行。这将涉及编写适当的适配器,而不仅限于SQL数据库。
替代将使用类似Zend_Db_Select
的内容,这是用于创建SQL查询的内部DSL。
ZF参考指南中的示例:
$select = $db->select()
->from( ...specify table and columns... )
->where( ...specify search criteria... )
->order( ...specify sorting criteria... );
但虽然Zend_Db_Select
(以及其他地方提到的PDO)在某种程度上抽象访问使用过的数据库系统,但它们仍然需要您了解SQL和表结构。与Query Object不同,使用像这样的的DB抽象层并不能保证可移植性。
根据您在这些方法中添加的参数,您最终可能会得到不再可移植的查询,例如: when you use a specific DB vendor's dialect or functions in the queries.
选择哪个取决于您的查询。如果您知道自己只有标准查询,请不要使用查询对象,因为实现起来需要更多努力。如果您希望与数据源最大程度地独立,请使用查询对象。
答案 1 :(得分:2)
听起来你正在寻找PHP的标准SQL抽象层PDO。