/**

* 数据库连接类,DAO

*/

class DPDO{

private $DSN;

private $DBUser;

private $DBPwd;

private $longLink;

private $pdo;

//私有构造函数 防止被直接实例化

private function __construct($dsn, $DBUser, $DBPwd, $longLink = false) {

$this->DSN = $dsn;

$this->DBUser = $DBUser;

$this->DBPwd = $DBPwd;

$this->longLink = $longLink;

$this->connect();

}

//私有 空克隆函数 防止被克隆

private function __clone(){}

//静态 实例化函数 返回一个pdo对象

static public function instance($dsn, $DBUser, $DBPwd, $longLink = false){

static $singleton = array();//静态函数 用于存储实例化对象

$singIndex = md5($dsn . $DBUser . $DBPwd . $longLink);

if (empty($singleton[$singIndex])) {

$singleton[$singIndex] = new self($dsn, $DBUser, $DBPwd, $longLink = false);

}

return $singleton[$singIndex]->pdo;

}

private function connect(){

try{

if($this->longLink){

$this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd, array(PDO::ATTR_PERSISTENT => true));

}else{

$this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd);

}

$this->pdo->query('SET NAMES UTF-8');

} catch(PDOException $e) {

die('Error:' . $e->getMessage() . '
');

}

}

}

/*

* @author ykm

* @date 2015.05.12

* @description database 操作实例化类

* 默认使用 关联数据 关联映射 查询

* execute 语句完成后 执行 $pdoStatement->debugDumpParams() 可以查看sql语句错误

*/

class DB {

protected $pdo;

public function __construct($dbType = 'mysql'){

require 'config.php';

if($dbType == 'mysql') {

$dsn = "mysql:host=$DB_IP;port=$DB_PORT;dbname=$DB_NAME";

}

$this->pdo = DPDO::instance($dsn, $DB_USER, $DB_PASSWORD);

}

public function fetch($sql, $searchData = array(), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) {

if ($sql) {

$sql .= ' limit 1';

$pdoStatement = $this->pdo->prepare($sql, $preType);

$pdoStatement->execute($searchData);

return $data = $pdoStatement->fetch($dataMode);

} else {

return false;

}

}

public function fetchAll($sql, $searchData = array(), $limit = array(0, 100), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) {

if ($sql) {

$sql .= ' limit ' . (int) $limit[0] . ',' . (intval($limit[1]) > 0 ? intval($limit[1]) : 10);

//echo "$sql";

$pdoStatement = $this->pdo->prepare($sql, $preType);

$pdoStatement->execute($searchData);

return $data = $pdoStatement->fetchAll($dataMode);

} else {

return false;

}

}

public function insert($tableName, $data, $returnInsertId = false, $replace = false) {

if(!empty($tableName) && count($data) > 0){

$sql = $replace ? 'REPLACE INTO ' : 'INSERT INTO ';

list($setSql, $mapData) = $this->FDFields($data);

$sql .= $tableName . ' set ' . $setSql;

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet ? ($returnInsertId ? $this->pdo->lastInsertId() : $execRet) : false;

} else {

return false;

}

}

public function update($tableName, $data, $condition, $mapData = array(), $returnRowCount = true) {

if(!empty($tableName) && count($data) > 0) {

$sql = 'UPDATE ' . $tableName . ' SET ';

list($setSql, $mapSetData) = $this->FDFields($data);

$sql .= $setSql;

$mapData = array_merge($mapData, $mapSetData);

list($where, $mapData) = $this->FDCondition($condition, $mapData);

$sql .= $where ? ' WHERE ' . $where : '';

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet ? ($returnRowCount ? $pdoStatement->rowCount() : $execRet) : false;

} else {

return false;

}

}

public function delete($tableName, $condition, $mapData = array()) {

if(!empty($tableName) && $condition){

$sql = 'DELETE FROM ' . $tableName;

list($where, $mapData) = $this->FDCondition($condition, $mapData);

$sql .= $where ? ' WHERE ' . $where : '';

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet;

}

}

//字段关联数组处理

public function FDFields($data, $link = ',', $judge = array(), $aliasTable = ''){

$sql = '';

$mapData = array();

foreach($data as $key => $value) {

$mapIndex = ':' . ($link != ',' ? 'c' : '') . $aliasTable . $key;

$sql .= ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $key . '` ' . (isset($judge[$key]) ? $judge[$key] : '=') . ' ' . $mapIndex . ' ' . $link;

$mapData[$mapIndex] = $value;

}

$sql = trim($sql, $link);

return array($sql, $mapData);

}

public function FDField($field, $value, $judge = '=', $preMap = 'cn', $aliasTable = '') {

$mapIndex = ':' . $preMap . $aliasTable . $field;

$sql = ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $field . '`' . $judge . $mapIndex;

$mapData[$mapIndex] = $value;

return array($sql, $mapData);

}

public function FDCondition($condition, $mapData) {

if(is_string($condition)) {

$where = $condition;

} else if (is_array($condition)) {

if($condition['str']) {

if (is_string($condition['str'])) {

$where = $condition['str'];

} else {

return false;

}

}

if(is_array($condition['data'])) {

$link = $condition['link'] ? $condition['link'] : 'and';

list($conSql, $mapConData) = $this->FDFields($condition['data'], $link, $condition['judge']);

if ($conSql) {

$where .= ($where ? ' ' . $link : '') . $conSql;

$mapData = array_merge($mapData, $mapConData);

}

}

}

return array($where, $mapData);

}

}

?>

一键复制

编辑

Web IDE

原始数据

按行查看

历史

dao.php,DAO.php · Dodd/Training Lab - Gitee.com相关推荐

  1. android dao设计模式,DAO设计模式

    1. DAO简介 DAO的全称是:Data Access Object,数据访问对象.使用DAO设计模式来封装数据库持久层所有操作(CRUD) ,使低级的数据逻辑和高级的业务分离,达到解耦合的目的. ...

  2. php 服务层dao层,DAO层,Service层,Controller层、View层详解

    1.Dao层 Dao层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,Dao层的设计首先是设计Dao的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此 ...

  3. java泛型dao,泛型DAO模式在JavaWeb开发中的应用_孟晨.pdf

    泛型DAO模式在JavaWeb开发中的应用_孟晨 29 1 Vol. 29 No. 1 第 卷第 期 计算机应用与软件 20 12 1 Computer Applications and Softwa ...

  4. Tiger DAO VC:DAO组织风险投资时代来临

    近年来,风险投资公司们一直在努力重塑自己,因为这个时代,创始人仅拥有大量资本加持,已经远远不够了.加密资产世界,如果一个人同事兼顾顾问.董事会成员和"外围助手"真的有点有心无力.因 ...

  5. J9数字论:什么是 DAO?DAO 的起源是什么

    最近获得关注的此类机会之一是去中心化自治组织或 DAO 的想法.虽然 DAO 显示出很多希望,但这种方法与其他通信和管理层次结构一样,既有优点也有缺点.J9数字论给您科普: 什么是 DAO? 尽管最近 ...

  6. 最大游戏工会YGG转型DAO,DAO能否成为下一个爆点?

    那些被称为 DAO 的数字原生组织,正在塑造一个前所未有的新型社会组织模式. 7月28日,当红的游戏公会组织YGG在MISO平台完成了通证发行,开始谋求从单一工会向DAO的转型,尝试权力下放和社区自治 ...

  7. dao层(dao层的作用)

    DAO定义了什么呢? 它定义数据库的结构,数据库中对象的名称及这些对象的属性 JAVA的DAO是什么呢? DAO是Data Access Object数据访问接口,数据访问:故名思义就是与数据库打交道 ...

  8. java包名有impl啥意思_java 包 dao 和 dao.impl 问题

    dao中存在是接口(interface) dao.impl中存在的是接口的具体实现(class) 至于好处,去查查接口的定义. 更新.... 举个例子 dao中有 public interface U ...

  9. V神论DAO:DAO不是公司 其去中心化很重要

    本文为Vitalik于9月20日在其博客发表的关于DAO的文章 最近,关于高度去中心化的DAO行不通的观点有很多讨论,为了保持竞争力,DAO治理最开始应该更接近于传统公司的治理.论点总是相似的:高度去 ...

最新文章

  1. javascript的匿名函数
  2. CTFshow 命令执行 web36
  3. android主题编辑器,使用 Theme Editor 设计应用主题背景
  4. 函数的作用域在各浏览器的混乱情况
  5. PHP 是最糟糕编程语言?
  6. 关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
  7. Java基础---File类,就是这么简单
  8. Linux内核跟踪eBPF:bpftrace一行教程
  9. 内点法(interior point method)求解二次规划,附python代码
  10. pdf格式文件怎么编辑
  11. html图片重叠轮播,原生js实现图片层叠轮播切换效果
  12. rails gem devise
  13. SCI 投稿全过程信件模板一览
  14. 【2022 CCPC 华为云计算挑战赛】1005 带权子集和 (NTT 优化dp)
  15. 电脑重装系统经验总结
  16. 华科CPP慕课SPOC第七章 编程题3
  17. el-tooltip的使用(根据条件控制显示)
  18. 迪士尼源码_如何取消迪士尼+订阅
  19. 避免后台进程被杀死的几种方法
  20. Spring Cloud OAuth2 认证服务器

热门文章

  1. 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
  2. 在Linux上安装Elasticsearch Kibaba.md
  3. Delphi开发中增删改查操作以及存储过程的调用方式
  4. Python高手之路【十】python基础之反射
  5. css :after和:before
  6. leetcode 1222 python
  7. RTT时钟管理篇——软硬定时器理解(二)
  8. 贪心+单调栈——去除重复字母(Leetcode 316)
  9. PAT乙级(1033 旧键盘打字)
  10. java mvel_mvel java和脚本的融合 -- kkito的博客