PHP : ActiveRecord实现示例
先简单介绍一下Active Record:
- <?php
- define('DBHOST', 'localhost');
- define('DBUSER', 'root');
- define('DBPASS', '');
- define('DBNAME', 'test');
- define('TABLE_PREFIX', 't_');
- class ActiveRecord {
- private $tablepre;
- private $class;
- private $table;
- private static $link;
- private $data;
- public $primaryKey = 'id';
- public function __construct() {
- $this->tablepre = TABLE_PREFIX;
- $this->class = get_class($this);
- $this->table = $this->tablepre . strtolower($this->class);
- $this->data = array();
- $this->connect();
- }
- private function connect() {
- if(!self::$link) {
- self::$link = mysql_connect(DBHOST, DBUSER, DBPASS);
- mysql_select_db(DBNAME);
- }
- return self::$link;
- }
- public function __set($name, $value) {
- $this->data[$name] = $value;
- }
- private function implodefields($cond) {
- $fields = array();
- foreach($cond as $key => $value) {
- $value = mysql_real_escape_string($value);
- $fields[] = "`$key`='$value'";
- }
- return implode(', ', $fields);
- }
- public function add() {
- $fields = $this->implodefields($this->data);
- $sql = "INSERT INTO `{$this->table}` SET $fields";
- $this->query($sql);
- }
- public function findById($id) {
- $sql = "SELECT * FROM `{$this->table}` WHERE `{$this->primaryKey}`='$id' LIMIT 1";
- $data = $this->getOne($sql);
- return $this->makeObjFromArray($data);
- }
- private function makeObjFromArray($data) {
- $obj = new $this->class;
- foreach($data as $key => $value) {
- $obj->$key = $value;
- }
- return $obj;
- }
- private function query($sql) {
- echo $sql . "\n";
- return mysql_query($sql, self::$link);
- }
- private function getOne($sql) {
- $data = $this->query($sql);
- if($data) {
- $item = mysql_fetch_assoc($data);
- return $item;
- }
- return false;
- }
- }
- class User extends ActiveRecord {
- var $primaryKey = 'id';
- }
- $user = new User();
- $user->name = '热电影';
- $user->email = 'www.redianying.com';
- $user->add();
- $user = $user->findById(1);
- print_r($user);
PHP : ActiveRecord实现示例的更多相关文章
- JFinal之ActiveRecord开发示例
JFinal独创Db + Record模式示例 JFinal配备的ActiveRecord插件,除了实现了类似Rails ActiveRecrod的功能之外,还实现了Db + Record模式,此模式 ...
- Yii 框架学习--01 框架入门
Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...
- Yii ActiveRecord 的via和viaTable示例
Yii中,将两个不相关的表利用中间表关联有via和viaTable两种方法,这里通过用户权限查询来进行示例. 关系如上,需要建立三个表 用户表 权限表 用户表 数据: 权限表 数据: 关联表 数据: ...
- ActiveRecord模式整理
DAO Data Access Object,数据访问对象 DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象 ...
- Padrino 博客开发示例
英文版出处:http://www.padrinorb.com/guides/blog-tutorial 楼主按 拿作者自己的话说:Padrino(谐音:派骓诺)是一款基于Sinatra的优雅的Web应 ...
- Castle ActiveRecord学习实践
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架.AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务. ...
- ActiveRecord的生命周期
ActiveRecord的生命周期,通过方法重写和插入我们需要的业务逻辑来达到我们对程序的控制. 示例: 1,beforeSave() public function beforeSave($inse ...
- Castle ActiveRecord学习(三)数据映射及特性描述
Model中的Demo: using Castle.ActiveRecord; using Castle.ActiveRecord.Queries; using System; using Syste ...
- Castle ActiveRecord学习(六)数据验证
参考.来源:http://www.cnblogs.com/Terrylee/archive/2006/04/13/374173.html https://github.com/castleprojec ...
随机推荐
- 【Git】GitHub for Windows使用(3) GitHub Flow的使用
第三章了,关于GitHub上有一个Pull Request,是展示本项目或资源所有的Pull 请求的. 而这个开发流程是基于GitHub Flow的开发模式. 网上关于GitHub Flow简单的介绍 ...
- 关于在.NET中 DAL+IDAL+Model+BLL+Web
其实三层架构是一个程序最基本的 在.Net开发中通常是多层开发比如说 BLL 就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后传递给 ...
- [Android Memory] 怎样使一个Android应用不被杀死
转载自: http://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.html 参考:http://blog.csdn.net/windskier/article/ ...
- 用Thunderbird以HTML发邮件,收件人却总是收到文本邮件
要在通讯录里面,把你要发送的人设置可以接收HTML格式的邮件,那么你才能发出HTML格式. 否则,Thunderbird默认你所发的收件人无法接收HTML格式邮件.
- Linux-C网络编程之epoll函数
上文中说到假设从100的不同的地方取外卖,那么epoll相当于一部手机,当外卖到达后,送货员能够通知你.从而达到每去必得,少走非常多路. 它是怎样实现这些作用的呢? epoll的功能 epoll是se ...
- VR虚拟现实的工作原理,你知道多少?【转】
VR虚拟现实经过几年的预热,已经开始呈现爆发式增长,要了解VR虚拟现实,就需要了解其工作原理,了解工作原理之前,我们就需要弄清楚眼睛是如何看清事物的. 眼睛瞳孔后有晶状体,也就是眼珠子.眼睛的背面有感 ...
- parallax corrected cubemap
https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity https:/ ...
- Vue组件开发实例(详细注释)
Vue组件开发实例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- 查看MySQL数据库大小
查看MySQL数据库大小 1.首先进入information_schema 数据库(存放了其他的数据库的信息) ? 1 2 mysql> use information_schema; Data ...
- WRTNode(MT7620n)USB启动总结
一.改动mt7620.dtsi,去掉默认的bootargs,kernel_menuconfig取消buildin的command line 二.kernel_menuconfig增加scsi驱动.US ...