php框架Yaf Pdo封装类和ORM集成的方法

php框架Yaf PDO封装类和ORM集成,yaf本身不带orm数据封装,我们可以建立在pdo上实现自己的封装。

一:首先我们使用php的单例模式,建立基类。library\Base.php

<?php
 
class Base {
 
/**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
*/
//保存例实例在此属性中
private static $_instance;
 
//单例方法
public static function getInstance() {
 
$class_name = get_called_class();
if (!isset(self::$_instance[$class_name])) {
 
self::$_instance[$class_name] = new $class_name;
}
 
/*@var $var $class_name*/
return self::$_instance[$class_name];
}
 
//阻止用户复制对象实例
public function __clone() {
trigger_error('Clone is not allow', E_USER_ERROR);
}
 
}

二:以注册用户信息为例,$userInfo为表单传入的数据,我们要插入到数据库

我们建立了userModel类

class userModel extends Model {
 
}
 
$uid = userModel::getInstance()->add($userInfo);
我们用add方法插入数据,我们需要建立这个方法在Model中

三:ORM 集成到library\Model.php

<?php
 
class Model extends Base {
 
//主键名称
public $primaryKey = 'id';
public $orderKey = 'id';
//数据表字段 字段名 => 字段初始值
public $fileds = array();
//只写缓存
protected $onlyCache = false;
//数据表名称
protected $table;
protected $readDb = false;
protected $cacheObj;
protected $dbObj;
 
 
 
function __construct() {
$this->init();
}
 
public function init() {
$this->table = str_replace('Model', '', get_called_class());
$this->dbObj = Db_Pdo::getInstance();
 
//导入db配置
$config = Common::getConfig('database');
 
$this->dbObj->loadConfig($config);
}
 
 
 
/**
* 新增数据
* @param type $parmas
* @return type
*/
public function add($parmas) {
if (!$parmas || !is_array($parmas))
return false;
 
$parmas = $this->initFields($parmas);
 
if (!$parmas)
return false;
 
$time = date("Y-m-d H:i:s");
$parmas['create_time'] = $time;
$parmas['update_time'] = $time;
$id = $this->insertDB($parmas);
 
if (!$id) {
return false;
}
 
return $id;
}
 
}
 
/**
* db新增
* @param type $parmas
* @return boolean
*/
private function insertDB($parmas) {
 
if ($this->onlyCache) {
return true;
}
 
if (!$parmas || !is_array($parmas)) {
return false;
}
 
$ret = $this->dbObj->insert($this->table, $parmas);
 
return $ret;
}

我们初始化了db配置,引用pdo操作类,在add方法中执行力pdo数据insertDB操作

四:最后我们要在pdo操作类中定义insert方法 执行最终的插入library/Db/Pdo.php

<?php
 
class Db_Pdo {
 
protected static $instance = null;
 
public static $TIMESTAMP_WRITES = false;
 
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
 
public function loadConfig($db) {
$this->configMaster($db['m']['host'], $db['m']['name'], $db['m']['user'], $db['m']['pwd'], $db['m']['port']);
$this->configSlave($db['s']['host'], $db['s']['name'], $db['s']['user'], $db['s']['pwd'], $db['s']['port']);
}
 
public function insert($table, $params = array(), $timestamp_this = null, $break = false) {
if (is_null($timestamp_this)) {
$timestamp_this = self::$TIMESTAMP_WRITES;
}
 
// first we build the sql query string
$columns_str = '(';
$values_str = 'VALUES (';
$add_comma = false;
 
// add each parameter into the query string
foreach ($params as $key => $val) {
// only add comma after the first parameter has been appended
if ($add_comma) {
$columns_str .= ', ';
$values_str .= ', ';
} else {
$add_comma = true;
}
 
// now append the parameter
$columns_str .= "$key";
$values_str .= ":$key";
}
 
// add the timestamp columns if neccessary
if ($timestamp_this === true) {
$columns_str .= ($add_comma ? ', ' : '') . 'date_created, date_modified';
$values_str .= ($add_comma ? ', ' : '') . time() . ', ' . time();
}
 
// close the builder strings
$columns_str .= ') ';
$values_str .= ')';
 
// build final insert string
$sql_str = "INSERT INTO $table $columns_str $values_str";
if ($break) {
return $sql_str;
}
// now we attempt to write this row into the database
try {
$pstmt = $this->getMaster()->prepare($sql_str);
 
// bind each parameter in the array
foreach ($params as $key => $val) {
$pstmt->bindValue(':' . $key, $val);
}
 
$pstmt->execute();
$newID = $this->getMaster()->lastInsertId();
 
// return the new id
return $newID;
} catch (PDOException $e) {
if (self::$SHOW_ERR == true) {
throw new Exception($e);
}
$this->pdo_exception = $e;
return false;
} catch (Exception $e) {
if (self::$SHOW_ERR == true) {
throw new Exception($e);
}
$this->pdo_exception = $e;
return false;
}
}
 
}

时间: 2024-12-31 23:50:14

php框架Yaf Pdo封装类和ORM集成的方法的相关文章

php框架Yaf 集成ZendFramework DB ORM 与 集成zendframework2 实例教程

Yaf 集成Zend Framework DB ORM yaf没有自己的ORM,可以集成zend的db 或者是symfony2的doctrine2 或者是laravel的Eloquent,都是比较强大的ORMP 首先我们集成zendframework1的DB类,以后我们会讲解如何继承zf2的DbAdapter ,ServiceManager或者Cache,以及Doctrine2,Eloquent 一:下载zf1的DB模块目录结构  YAF\library\Zend,文章底部 二:定义配置文件ap

使用Python的web.py框架实现类似Django的ORM查询的教程

  这篇文章主要介绍了使用Python的web.py框架实现类似Django的ORM查询的教程,集成的ORM操作数据库向来是Python最强大的功能之一,本文则探讨如何在web.py框架上实现,需要的朋友可以参考下 Django中的对象查询 Django框架自带了ORM,实现了一些比较强大而且方便的查询功能,这些功能和表无关.比如下面这个例子: ? 1 2 3 4 5 6 7 class Question(models.Model): question_text = models.CharFie

zend框架用pdo链接mysql失败,求解?

问题描述 zend框架用pdo链接mysql失败,求解? 这是网页的错误提示 php.ini的配置 我把所有关键位置都截图了.我不知道哪里错了 是不是少了php_pdo.dll是不是少了这个? 解决方案 php.ini 中找到 ;extension=php_pdo.dll ;extension=php_pdo_mysql.dll 去掉前面分号 ,重启服务

《ASP.NET MVC验证框架中关于属性标记的通用扩展方法》之继续扩展

首先需要对xVal有点熟悉: http://www.codeplex.com/xval 建议下载最新源码而不是编译版本 再看两篇文章: http://goneale.com/2009/03/04/using-metadatatype-attribute-with-aspnet-mvc-xval- validation-framework/ 深山老林将之翻译为:<ASP.NET MVC验证框架中关于属性标记的通用扩展方法> http://www.cnblogs.com/wlb/archive/2

thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法

  本文实例讲述了thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法.分享给大家供大家参考.具体分析如下: 3.2版本支持根据当前的运行环境生成Lite文件,可以替换框架的入口文件或者应用入口文件,提高运行效率. 我们的建议是在生产环境中关闭调试模式后生成Lite文件. 注意,目前SAE平台不支持直接生成Lite文件. 生成Lite文件 要生成Lite文件,需要在入口文件中增加常量定义: 代码如下: define('BUILD_LITE_FILE',true); 默认情况下

ci框架[2.x]版本 设置了路由,方法里面用segment怎么接收参数

问题描述 ci框架[2.x]版本 设置了路由,方法里面用segment怎么接收参数 配置文件里面路由规则是默认的,如下: $config['uri_protocol'] = 'AUTO'; 配置路由规则如下: $route['special/(d+).html'] = "home/special_detail/$1"; 访问地址:http://www.test.cn/special/21.html 在控制器里面接收参数id: function special_detail(){ $id

网页设计与开发-关于页面框架的东西,除了iframe还有什么方法

问题描述 关于页面框架的东西,除了iframe还有什么方法 比如一个OA系统的管理页面,导航栏是一块,来刷新一块页面的页面 或者指向其他页面,就是c#的母版页的概念 除了这个还有iframe框架,还有其他什么方法实现? 解决方案 dev +ajax 应该也可以实现.ajax刷新指定区域.

求问ssh框架中jsp页面传给action指定方法,action无法自动获取

问题描述 求问ssh框架中jsp页面传给action指定方法,action无法自动获取,jsp中name也指定了,action无法get到textfiled传进去的值 解决方案 解决方案二:是struts2吗?具体贴代码把,如果textfiled设置成disabled也是不传值得解决方案三:引用1楼ltyisangel的回复: 是struts2吗?具体贴代码把,如果textfiled设置成disabled也是不传值得 readonly是可以传值的解决方案四:你在方法里面request.getPa

PHP使用PDO操作数据库的乱码问题解决方法_php技巧

本文实例讲述了PHP使用PDO操作数据库的乱码问题解决方法.分享给大家供大家参考,具体如下: 当使用 PDO 连接操作数据库的时候,有时会出现:保存在数据库中的汉字为乱码.以文件为 UTF-8 格式,其解决方法如下: (1)实例化的对象直接执行 query() 方法或者 exec() 方法: <?php class DB { static public function getDB() { try { $_opts_values = array(PDO::ATTR_PERSISTENT=>tr