PHPackages                             shen2/mdo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. shen2/mdo

ActiveLibrary

shen2/mdo
=========

A php asynchronous library for mysql (based on mysqli and mysqlnd driver)

v0.6(10y ago)84292MITPHPPHP &gt;=5.5.0

Since May 29Pushed 9y ago2 watchersCompare

[ Source](https://github.com/shen2/MDO)[ Packagist](https://packagist.org/packages/shen2/mdo)[ RSS](/packages/shen2-mdo/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)DependenciesVersions (3)Used By (0)

MDO
===

[](#mdo)

MDO是一个用php编写的依赖mysqli和mysqlnd的ORM类(Object Relational Mapping)，通过它你可以用面向对象的方式来写sql语句，也可以以面向对象的方式来操作每一条数据库记录。

MDO基于Zend Framework 1.x版本中的Zend\_Db组件修改而来，经过彻底的修改和优化之后，去掉了对Zend Framework其他组件的依赖。能达到很高的性能，同时给你的编程带来极大的便利。

MDO由沈振宇开发，先后用于图虫网和多说网的服务器端php程序，经过2年多生产环境的考验，可靠稳定。

特性
--

[](#特性)

性能方面

- MDO会将多个sql语句拼合在一起执行query操作，由于php会在第一条SQL语句执行完成之后就返回，因此能够在同步编程模式中实现类似于“伪异步”的效果，从而减少mysql阻塞时间，大大提高整体性能。
- MDO充分利用php SPL中的ArrayObject和SplFixedArray，使对于数据对象的访问、迭代速度相比Zend\_Db有数量级的提升。

编程模式

- 倡导流式接口(fluent interface)
- 将数据表抽象成静态类，避免了无谓的实例化声明，去掉所有不必要的中间变量和赋值过程，从而简化代码
- 代码更接近自然语言。

希望MDO能让你的php编程变得更优雅，更快乐。

局限性
---

[](#局限性)

- MDO由于将所有数据表都抽象成静态类，因此无法应对需要做水平Sharding的数据表 (在多说上使用的是经过改进的MDO，从而使它支持Sharding)
- MDO虽然有beginTransaction()这样的方法，但事务操作未经过测试，不能保证可用性（因为作者所涉及的业务都不需要事务操作）
- MDO目前不支持主从读写分离，但是会考虑以后支持

环境和依赖
-----

[](#环境和依赖)

- php 5.3+，建议php5.4.11以上版本 (已知 php5.4.9 的mysqlnd存在bug，会导致出错)
- PDO扩展，建议安装mysqlnd扩展
- 建议使用autoload机制

类的基本说明
------

[](#类的基本说明)

- MDO 基本常量声明
- MDO\\Adapter 维护PDO connection的适配器
- MDO\\DataObject 核心类，调用静态方法时是对数据表的操作，调用实例方法是对数据记录的操作
- MDO\\Select.php SQL语句的抽象，可以流式接口编写SQL语句
- MDO\\TableSelect Select对象的派生
- MDO\\Statement 储存sql查询语句的中间结果，可以直接进行foreach迭代或者count()
- MDO\\Expr SQL语句中的特殊表达式，比如 now()，n + 1 这样不需要经过转义的表达式
- MDO\\Profiler 记录sql运行执行情况，可以只在development模式下使用，生产环境不加载

初始化方法
-----

[](#初始化方法)

```
