dao.php,DAO.php · Dodd/Training Lab - Gitee.com
/**
* 数据库连接类,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相关推荐
- android dao设计模式,DAO设计模式
1. DAO简介 DAO的全称是:Data Access Object,数据访问对象.使用DAO设计模式来封装数据库持久层所有操作(CRUD) ,使低级的数据逻辑和高级的业务分离,达到解耦合的目的. ...
- php 服务层dao层,DAO层,Service层,Controller层、View层详解
1.Dao层 Dao层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,Dao层的设计首先是设计Dao的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此 ...
- java泛型dao,泛型DAO模式在JavaWeb开发中的应用_孟晨.pdf
泛型DAO模式在JavaWeb开发中的应用_孟晨 29 1 Vol. 29 No. 1 第 卷第 期 计算机应用与软件 20 12 1 Computer Applications and Softwa ...
- Tiger DAO VC:DAO组织风险投资时代来临
近年来,风险投资公司们一直在努力重塑自己,因为这个时代,创始人仅拥有大量资本加持,已经远远不够了.加密资产世界,如果一个人同事兼顾顾问.董事会成员和"外围助手"真的有点有心无力.因 ...
- J9数字论:什么是 DAO?DAO 的起源是什么
最近获得关注的此类机会之一是去中心化自治组织或 DAO 的想法.虽然 DAO 显示出很多希望,但这种方法与其他通信和管理层次结构一样,既有优点也有缺点.J9数字论给您科普: 什么是 DAO? 尽管最近 ...
- 最大游戏工会YGG转型DAO,DAO能否成为下一个爆点?
那些被称为 DAO 的数字原生组织,正在塑造一个前所未有的新型社会组织模式. 7月28日,当红的游戏公会组织YGG在MISO平台完成了通证发行,开始谋求从单一工会向DAO的转型,尝试权力下放和社区自治 ...
- dao层(dao层的作用)
DAO定义了什么呢? 它定义数据库的结构,数据库中对象的名称及这些对象的属性 JAVA的DAO是什么呢? DAO是Data Access Object数据访问接口,数据访问:故名思义就是与数据库打交道 ...
- java包名有impl啥意思_java 包 dao 和 dao.impl 问题
dao中存在是接口(interface) dao.impl中存在的是接口的具体实现(class) 至于好处,去查查接口的定义. 更新.... 举个例子 dao中有 public interface U ...
- V神论DAO:DAO不是公司 其去中心化很重要
本文为Vitalik于9月20日在其博客发表的关于DAO的文章 最近,关于高度去中心化的DAO行不通的观点有很多讨论,为了保持竞争力,DAO治理最开始应该更接近于传统公司的治理.论点总是相似的:高度去 ...
最新文章
- javascript的匿名函数
- CTFshow 命令执行 web36
- android主题编辑器,使用 Theme Editor 设计应用主题背景
- 函数的作用域在各浏览器的混乱情况
- PHP 是最糟糕编程语言?
- 关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
- Java基础---File类,就是这么简单
- Linux内核跟踪eBPF:bpftrace一行教程
- 内点法(interior point method)求解二次规划,附python代码
- pdf格式文件怎么编辑
- html图片重叠轮播,原生js实现图片层叠轮播切换效果
- rails gem devise
- SCI 投稿全过程信件模板一览
- 【2022 CCPC 华为云计算挑战赛】1005 带权子集和 (NTT 优化dp)
- 电脑重装系统经验总结
- 华科CPP慕课SPOC第七章 编程题3
- el-tooltip的使用(根据条件控制显示)
- 迪士尼源码_如何取消迪士尼+订阅
- 避免后台进程被杀死的几种方法
- Spring Cloud OAuth2 认证服务器
热门文章
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
- 在Linux上安装Elasticsearch Kibaba.md
- Delphi开发中增删改查操作以及存储过程的调用方式
- Python高手之路【十】python基础之反射
- css :after和:before
- leetcode 1222 python
- RTT时钟管理篇——软硬定时器理解(二)
- 贪心+单调栈——去除重复字母(Leetcode 316)
- PAT乙级(1033 旧键盘打字)
- java mvel_mvel java和脚本的融合 -- kkito的博客