<?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. linux命令权限

    linux-命令权限 1)   新建用户natasha,uid为1000,gid为555,备注信息为“master” 2)   修改natasha用户的家目录为/Natasha 3)   查看用户信息 ...

  2. h1标签

    h1标签一.每个网页只能拥有一个<H1>标签 H2,H3,H4可以有多个...但多个H1造成的后果是搜索引擎不知道你这个页面哪个标题内容最重要,会淡化这个页面的标题和关键词.H1用得好的话 ...

  3. matlab eye 函数

    eye(n,n) 产生一个n*n的单位矩阵 eye(n,m) 产生一个n*m的单位矩阵 eye(3,3) ans = 1 0 0 0 1 0 0 0 1 eye(3,4) ans = 1 0 0 0 ...

  4. 前台cookie的操作

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  5. 【前端工具】seajs打包部署工具spm的使用总结

    相信使用seajs的好处大家都是知道的,接触seajs好像是在半年前,当时还不知道页面阻塞问题,这里不带多余的话了. seajs实现了模块化的开发,一个网站如果分了很多很多模块的话,等开发完成了,发现 ...

  6. redis高级应用特征

    Redis高级应用特性 1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性 设置客户端连接后进行任何其他指定前需要使用的密码. 警告:因为redis速 ...

  7. APUE学习笔记——6 系统数据文件与信息

    1.用户口令:/etc/passwd文件 该文件中包含下列结构体信息.其中,当下主修熊passwd不再这里显示,是使用了一个占位符. struct passwd { char * pw_name; / ...

  8. debug运行java程序报错

    debug运行java程序报错 ERROR: transport error 202: connect failed: Connection timed out ERROR: JDWP Transpo ...

  9. 利用层序遍历(含空节点)和中序遍历重建二叉树 python

    给定一颗二叉树的层序遍历(不含None的形式)和中序遍历序列,利用两个序列完成对二叉树的重建. 还是通过一个例子来说明整个过程,下图所示的二叉树,层序遍历结果为[a,b,c,d,e],中序遍历结果为[ ...

  10. python常用模块之configparser模块

    python常用模块之configparser 作用:解析配置文件 假设在当前目录下有这样一个conf.ini文件 [DEFAULT] ServerAliveInterval = 45 Compres ...