分离并独立使用CodeIgniter数据库和Active Record类

02/16/2013

作为CodeIgniter的特色功能,数据库类异常的强大,尤其是Active Record,这个数据库模式使得用PHP原生代码需要投入大量精力的工程只需写上一两行代码就可以解决。

之前Kaijia用CodeIgniter编写过几个网站,里面就大量使用了Active Record,这次Kaijia要编写的是一个简单的PHP命令行程序,但是要用到大量SQL脚本,于是考虑使用CodeIgniter的数据库功能。但是由于程序只有一个文件,却为了使用Active Record功能而加入了整个CodeIgniter框架,有点说不过去了。

于是Kaijia尝试将CodeIgniter的数据库类和Active Record类分离出来单独使用,Google了一下后找到了Hasin Hayder的博文《Using ActiveRecord Library Separately from CodeIgniter》和gisanfu发布在Github上的脚本。尝试之后Kaijia发现这两个方法都不好,前者只支持MySQL并且部分功能不可用,后者虽然可行但引用了太多不必要的内容。于是决定自己研究,经过很多次测试Kaijia终于尝试出了一个更加简洁的方法。

首先下载在CI官网下载最新版本的CodeIgniter。解压缩后将system/database文件夹复制到你的根目录下,同时在根目录下新建core文件夹,复制system/core/Common.php文件到新建的文件夹中。然后将以下代码复制到你的脚本的最开始:

将“driver://username:password@hostname/dbname”替换为你自己的DSN,例如“mysql://root:password@localhost/mydatabase”就可以想在CI项目中一样使用Active Record了。注意由于脱离了CodeIgniter大实例,所有的$this->db都需要改成$db才能运行。

Kaijia已经把整理之后的代码发布在Github上,你可以访问此页面查看或者直接下载代码