<?php
/**
* 对Yii2数据封装
* @author nike@youfumama.com
* @date 2017-03-08
* 抽象类不能被实例化
*
eg1: select
use common\models as b_model; $users_model = b_model\FactoryModel::users();
$users_model->setPk(1);
$users_model->setFields('id,name,age,sex');
$result = $users_model->getInfoByPk();
=================================================
eg2: update|insert
use common\models as b_model;
use common\models\entity as b_entity; $users_entity = new b_entity\Users();
$users_entity->name = '尼克';
$users_entity->age = 25;
$users_model = b_model\FactoryModel::users();
$users_model->setPk(1);
$result = $users_model->updateByPk($users_entity);
*/
namespace common\models; use yii;
use yii\db\ActiveRecord; /**
* Base model
* @author nike@youfumama.com
* @date 2017-03-08
*/
abstract class BaseModel extends ActiveRecord
{
protected static $_db = null;
private $sql;
private $PrimaryKeyField; //主键字段名
private $pk; //主键
private $field_values;//存放数据库字段数组
protected $table;
protected $field = '*';
protected $where;
protected $orderby;
protected $limit;
protected $groupby; /**
* set db
* @param type $db
*/
protected function _setDb($db = null)
{
if(null == $db)
$db = Yii::$app->db;
self::$_db = $db;
}
/**
* get db
* @return type
*/
protected function _getDb()
{
if(empty(self::$_db))
$this->_setDb ();
return self::$_db;
}
/**
* 设置SQL语句
*/
private function setSQL($sql)
{
$this->sql = $sql;
}
/**
* 获取SQL语句
*/
function getSQL()
{
return $this->sql;
}
/**
* 设置field_values
*/
private function setFieldValues($field_values)
{
if(!is_object($field_values))
throw new Exception ('entity must be Object', 500);
$this->field_values = $field_values;
}
/**
* 获取field_values
*/
private function getFieldValues()
{
return $this->cleanArray((array)$this->field_values);
}
/**
* 清除values of SQL injections
* @param type $array
* @return array
*/
private function cleanArray($array)
{
$array = array_map('trim', $array);
$array = array_map('stripslashes', $array);
$array = array_map('mysql_real_escape_string', $array);
return $array;
}
/**
* 设置主键字段名
*/
protected function setPrimaryKeyField($PrimaryKeyField)
{
$this->PrimaryKeyField = $PrimaryKeyField;
}
/**
* 获取主键字段名
*/
protected function getPrimaryKeyField()
{
return $this->PrimaryKeyField;
}
/**
* 设置主键值
* @param int
*/
public function setPk($pk)
{
$this->pk = $pk;
}
/**
* 获取主键值
* @return int
*/
public function getPk()
{
return $this->pk;
}
/**
* 设置表名
*/
protected function setTable($table)
{
$this->table = $table;
}
/**
* 获取表名
*/
protected function getTable()
{
return $this->table;
}
/**
* 设置Fields
*/
function setFields($fields)
{
$this->field = $fields;
}
/**
* 获取Fields
*/
function getFields()
{
return $this->field;
}
/**
* 设置where条件
*/
function setWhere($where)
{
$this->where = $where;
}
/**
* 获取where条件
*/
function getWhere()
{
return $this->where;
}
/**
* 设置Group
*/
function setGroupBy($groupby)
{
$this->groupby = $groupby;
}
/**
* 获取Group
*/
function getGroupBy()
{
return $this->groupby;
}
/**
* 设置Order
*/
function setOrderBy($orderby)
{
$this->orderby = $orderby;
}
/**
* 设置Order
*/
function getOrderBy()
{
return $this->orderby;
}
/**
* 设置条数
*/
function setLimit( $limit )
{
$this->limit = $limit;
}
/**
* 获取条数
*/
function getLimit()
{
return $this->limit;
}
/**
* 根据主键获取
*/
function getInfoByPk()
{
$sql = "select {$this->getFields()} "
."from {$this->getTable()} "
."where {$this->getPrimaryKeyField()}={$this->getPk()}";
return $this->query_one($sql);
}
/**
* 根据where条件获取一条信息
*/
function getOneByWhere()
{
$sql = "SELECT {$this->getFields()} "
. "FROM {$this->getTable()} "
. "WHERE {$this->getWhere()}";
return $this->query_one($sql);
}
/**
* 根据where条件获取数组列表
*/
function getListByWhere()
{
$sql = "SELECT ";
$sql .= "{$this->getFields()} "
. "FROM {$this->getTable()} ";
if ( $this->getWhere() != null ) {
$sql .= "WHERE {$this->getWhere()} ";
}
if ( $this->getGroupby() != null ) {
$sql .= "GROUP BY {$this->getGroupby()} ";
}
if ( $this->getOrderby() != null ) {
$sql .= "ORDER BY {$this->getOrderby()} ";
}
if ( $this->getLimit() != null ) {
$sql .= "LIMIT {$this->getLimit()}";
}
return $this->query_all($sql);
}
/**
* 根据where获取count
*/
function getCountByWhere()
{
$sql_count = "SELECT COUNT(*) AS total FROM {$this->getTable()} ";
if ( $this->getWhere() != null ) {
$sql_count .= "WHERE " . $this->getWhere();
}
return $this->query_scalar($sql_count);
}
/**
* 根据主键更新
*/
function updateByPk($entity)
{
$this->setFieldValues($entity);
$sql = "UPDATE {$this->getTable()} SET ";
foreach ($this->getFieldValues() as $key => $one){
if ($one != NULL){
$sql .= "$key='$one',";
}
}
$sql = rtrim($sql, ',');
$sql .= " WHERE {$this->getPrimaryKeyField()}='{$this->getPk()}'";
return $this->execute($sql);
}
/**
* 根据WHERE更新
*/
function updateByWhere($entity)
{
$this->setFieldValues($entity);
$sql = "UPDATE {$this->getTable()} SET ";
foreach ($this->getFieldValues() as $key => $one){
if ($one != NULL){
$sql .= "$key='$one',";
}
}
$sql = rtrim($sql, ',');
$sql .= " {$this->getWhere()}";
return $this->execute($sql);
}
/**
* 根据WHERE更新
*/
function insert_table($entity)
{
$this->setFieldValues($entity);
$sql_values = '';
$sql = "INSERT INTO {$this->getTable()} (";
foreach ($this->getFieldValues() as $key => $one){
if ($one != NULL){
$sql .= "$key,";
$sql_values .= "'$one',";
}
}
$sql = rtrim($sql, ',').") VALUES (".rtrim($sql_values, ',').")";
return $this->execute($sql);
} //-------------------------Yii2 base----------------------
//-------------------------Yii2 base----------------------
//-------------------------Yii2 base----------------------
//* @author nike@youfumama.com
//* @date 2017-03-08
//* 可扩展
/**
* 只获取一行,如果该查询没有结果则返回 false
* @param type $sql
* @return mix
*/
private function query_one($sql)
{
return $this->_getDb()->createCommand($sql)->queryOne();
}
/**
* 返回所有数组,如果该查询没有结果则返回空数组
* @param type $sql
* @return type
*/
private function query_all($sql)
{
return $this->_getDb()->createCommand($sql)->queryAll();
}
/**
* 返回一个标量值,如果该查询没有结果则返回 false
* @param type $sql
* @return type
*/
private function query_scalar($sql)
{
return $this->_getDb()->createCommand($sql)->queryScalar();
}
/**
* execute操作
* @param type $sql
* @return type
*/
private function execute($sql)
{
return $this->_getDb()->createCommand($sql)->execute();
}
/**
* sql过滤,后期安全扩展
* @param type $str
* @return type
*/
private function cleanString($value = '')
{
if (is_string($value)) {
$value = trim($value);
$value = stripslashes($value);
$value = mysqli_real_escape_string($value);
}
return $value;
}
//-------------------------Yii2 END----------------------
//-------------------------Yii2 END----------------------
//-------------------------Yii2 END----------------------
}

php 数据库类的更多相关文章

  1. PHP用单例模式实现一个数据库类

    使用单例模式的出发点: 1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源. 2.如果系统中需要有一个类来全局控制某些 ...

  2. Dedesql数据库类详解

    今天花点时间讲解下织梦的sql数据库类,近期本来是准备录制一套视频教程的,但由于视频压缩的问题迟迟没有开展工作,如果大家有什么好的视频压缩方式可以通过邮件的方式告诉我:tianya#dedecms.c ...

  3. phpcms 源码分析四: 数据库类实现

    这次是逆雪寒的数据库类分析: <?php /* 这个讲 phpcms 的数据库类 和 phpcms 的文本缓存的实现.看了看 都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,最好能装了PHP ...

  4. php备份数据库类分享

    本文实例讲述了php实现MySQL数据库备份类.分享给大家供大家参考.具体分析如下:这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的配置好连接地址用户名与数据库即可   ph ...

  5. Python一个简单的数据库类封装

    #encoding:utf-8 #name:mod_db.py '''使用方法:1.在主程序中先实例化DB Mysql数据库操作类.      2.使用方法:db=database()  db.fet ...

  6. dede数据库类使用方法 $dsql(转)

    dede数据库类使用方法 $dsql   dedecms的数据库操作类,非常实用,在二次开发中尤其重要,这个数据库操作类说明算是奉献给大家的小礼物了. 引入common.inc.php文件 ? 1 r ...

  7. Dedesql数据库类详解(二次开发必备教程)(转)

    http://www.dedecms.com/help/development/2009/1028/1076.html 织梦DedeCMS的二次开发不仅仅是会写写织梦的标签,会制作织梦的模板.很多时候 ...

  8. CodeIgniter自带的数据库类使用介绍

    在 CodeIgniter 中,使用数据库是非常频繁的事情.你可以使用框架自带的数据库类,就能便捷地进行数据库操作. 初始化数据库类 依据你的数据库配置载入并初始化数据库类: view source ...

  9. CodeIgniter框架——数据库类(配置+快速入门)

    CodeIgniter用户指南——数据库类 数据库配置 入门:用法举例 连接数据库 查询 生成查询结果 查询辅助函数 Active Record 类 事务 表格元数据 字段元数据 自定义函数调用 查询 ...

  10. Dedesql数据库类详解(二次开发必备教程)

    其实数据库类织梦之前就有一个介绍,http://help.dedecms.com/v53/archives/functions/db/,这篇文章讲解了数据库类的一些常见的使用方法,不过没有结合例子去介 ...

随机推荐

  1. Python执行Linux系统命令方法

    Python执行Linux系统命令的4种方法 (1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 复制代码代码如下: system(command) -> ...

  2. 编写3ds max插件时遇到的问题总结

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/ 这几天在给公司的美术编写3ds max 2009使用的插件,遇到了一些问题,在此记录一下解 ...

  3. 详解offset

    offset offset 译为“偏移量”,是javascript很重要的一个概念.涉及到便宜量的主要有offsetLeft.offsetTop.offHeight.offsetWidth这四个属性还 ...

  4. Mycat跨分片Join

    1 前言 Mycat目前版本支持跨分片的join,主要实现的方式有四种. 全局表 ER分片 HBT(参考MyCAT人工智能解决跨分片SQL.docx) ShareJoin ShareJoin在开发版中 ...

  5. 二十二、utl_inaddr(用于取得局域网或Internet环境中的主机名和IP地址)

    1.概述 作用:用于取得局域网或Internet环境中的主机名和IP地址. 2.包的组成 1).get_host_name作用:用于取得指定IP地址所对应的主机名语法:utl_inaddr.get_h ...

  6. 《Effective C++》第2章 构造/析构/赋值运算(2)-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  7. MATROSKA 文件格式

    MATROSKA 文件格式 1.EBML (Extensible Binary Meta Language): EBML语言使用不定长整数,这种方式相对于固定长度的32位/64位字长的整数值更节约空间 ...

  8. Android 开发 Tip 17 -- 为什么getBackground().setAlpha(); 会影响别的控件?

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/75670018 http://www.jb51.net/article/110035.h ...

  9. iOS - 正则表达式判断邮箱、身份证,车牌,URL等..是否正确:

    //邮箱 + (BOOL) validateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Z ...

  10. 线性回归 Linear regression(2)线性回归梯度下降中学习率的讨论

    这篇博客针对的AndrewNg在公开课中未讲到的,线性回归梯度下降的学习率进行讨论,并且结合例子讨论梯度下降初值的问题. 线性回归梯度下降中的学习率 上一篇博客中我们推导了线性回归,并且用梯度下降来求 ...