【问题标题】:PHP SQL Query building enginePHP SQL 查询构建引擎
【发布时间】:2011-06-22 04:08:15
【问题描述】:

我正在寻找 PHP 的查询构建引擎(not ORM!),它将满足下面指定的一些条件。不幸的是,在研究了 Doctrine、Propel、Adodb、Zend_Db 等之后,我找不到任何真正符合配置文件的东西——它们要么太抽象(我不需要 ORM 级别的抽象),要么不支持足够的特性.我需要的是一个库,它允许我以编程方式构建 SQL 查询——我什至不需要它来运行它,尽管那也可以。

我真的很想避免重新发明轮子,所以如果您知道符合个人资料的内容,请提出来。如果您认为上面提到的其中一个适合(我错过了),请也告诉我。

必须有(如果图书馆没有,它对我没用):

  • 支持 PHP 5.2(不幸的是,命名空间库暂时不能使用)
  • 支持程序化查询生成,包括select表达式、order-by、limit、group-by、have、union、outer join等。
  • 支持 Mysql、Oracle oci8、MSSQL、DB2、Postrges
  • 支持构建命名参数化查询和准备好的语句
  • 支持随时动态添加条件/加入
  • 支持日期时间等数据类型 - 例如,正确格式化传入/传出数据,在需要时使用正确的比较函数等(当然还有正确的引用)。我们知道代码中所有字段的类型,因此库应该允许我们告诉它每个字段是什么。
  • 独立(易于使用,无需大量其他支持类)
  • 易于扩展且许可允许以类似 BSD 的条款进行扩展
  • 清理 PHP 5 代码(没有 PHP 4 object-by-ref cruft 等)

很高兴(我们可以在“必须拥有”的基础上实现它,但如果已经完成会更快乐)

  • 支持实例化参数化查询(全部和部分) - 即在构建查询支持后为其提供部分参数并生成替换这些参数的新查询
  • 支持合并两个查询(即将一个查询中的条件和表添加到另一个查询中)
  • 支持查询 cmets(包括参数化)

奖金(这真的会让我们很开心,但我们现在可以没有它)

  • 支持序列化
  • 支持缓存

那么,有人知道这样的图书馆吗?

【问题讨论】:

  • 请问Zend_Db什么被取消资格?它具有似乎符合您所描述内容的低级方法:$select->from(..)->where(..)->groupBy(..)。它使用支持大多数(如果不是全部)指定数据库的 PDO,并且据我了解,它是相当独立的。
  • @Mike:它不支持数据类型 AFAIK,只支持位置参数,不支持命名参数。至少这是我从文档和代码中得到的。无论如何我都在考虑使用它并扩展它以支持它,但如果已经有它,我不想这样做。
  • 我有一个库可以做到这一点。例如:Person::name('billy')->join(Town::table(), Town::id(), SQL::OP_EQUAL, Persion::town_id())->group_by(Town::id())->select(SQL::count(Persion::id()), Town::all_fields());
  • @StasM 这应该可以工作:$select->where('id = :user_id', array('user_id' => 123));Source
  • @MikeB 我不确定它是否支持不进行命名绑定的后端。如果是,那么 ZF 只少了一个点,非常接近。

标签: php sql database database-abstraction


【解决方案1】:

CodeIgniter 是您正在寻找的安全的选择:http://codeigniter.com/user_guide/database/active_record.html

此外,它可以轻松地从其核心扩展来满足您的需求。它还具有查询缓存(您的奖励项目之一)。

【讨论】:

  • 我不需要 ActiveRecord,我只需要查询生成器。我不太喜欢他们的 API 决策——比如有单独的 or_where_not_in or_not_like 方法,我在那里看不到参数化查询支持。此外,他们的代码使用 eval 并通过引用传递对象。
  • @StasM 是的,它使用 evals 加载数据库类,但从不与任何查询数据或任何用户输入一起使用。他们显然是分开的……他们永远不会相遇。此外,如果您不喜欢某些核心功能(例如or_where_not_in),请不要使用它们。扩展库并编写自己的。不管怎样,祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多