PHP PDO类 单例
<?php
/*//pdo连接信息
$pdo=array("mysql:host=localhost;dbname=demo;charset=utf8","root","");
//开始连接数据库
$db = Mysql::newClass();
$db->pdoConnect($pdo); $updateRow = array(
"user_id" => "2",
"meta_key" => "username"
); //$db->select("wp_usermeta"); //发送sql
//$result=$db->selectOne(); //获取一条数据
//$db->selectCount(); //获取全部 //$db->update("wp_usermeta",$updateRow,"umeta_id=1"); //更新信息
//$db->insert("wp_usermeta",$updateRow); //插入数据
//echo $db->lastinsertid(); //获取插入后的id
//$db->delete("wp_usermeta","umeta_id>18"); //删除数据*/ class Mysql
{
private static $object;
private $PDO;
private $prepare; /////单例模式 start
private function __construct()
{
} public static function newClass()
{
if(!(self::$object instanceof self))
{
self::$object = new self;
}
return self::$object;
} public function __clone(){
trigger_error('Clone is not allow!',E_USER_ERROR);
}
//////单例模式 end //连接pdo
public function pdoConnect($address)
{
try{
$this->PDO = new PDO($address[],$address[],$address[]);
$this->PDO->setAttribute(PDO::ATTR_PERSISTENT,true);
//设置抛出错误
$this->PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//设置当字符串为空时转换为sql的null
$this->PDO->setAttribute(PDO::ATTR_ORACLE_NULLS,true);
//由MySQL完成变量的转义处理
$this->PDO->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (PDOException $e)
{
$this->Msg("PDO连接错误信息:".$e->getMessage());
}
} //错误提示
private function Msg($the_error=""){
$html="<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
<title>mysql error</title>
</head>
<body>
<div style='width: 50%; height: 200px; border: 1px solid red; font-size: 12px;'>
$the_error
</div>
</body>
</html>
";
echo $html;
exit;
} /*
*
* insert,delete,update操作
*
* */
public function insert($table,$row)
{
$sql=$this->sqlCreate("insert",$table,$row);
$result = $this->sqlExec($sql);
} public function update($table,$row,$where)
{
$sql=$this->sqlCreate("update",$table,$row,$where);
$result = $this->sqlExec($sql);
} public function delete($table,$where)
{
$sql=$this->sqlCreate("delete",$table,"",$where);
$result = $this->sqlExec($sql);
} //服务与insert,update,delete,生成sql
private function sqlCreate($action,$table,$row="",$where="")
{
$actionArr = array(
"insert" => "insert into ",
"update" => "update ",
"delete" => "delete from "
);
$row = empty($row) ? "": $this->rowCreate($row);
$where = empty($where) ? "":" where ".$where;
$sql = $actionArr[$action].$table.$row.$where;
return $sql;
} //拼成row
private function rowCreate($row)
{
$sql_row=" set";
foreach($row as $key=>$val)
{
$sql_row.=" ".$key."='".$val."',";
}
return trim($sql_row,",");
} //执行sql,返还影响行数
private function sqlExec($sql)
{
try{
$result=$this->PDO->exec($sql);
}catch (PDOException $e)
{
$this->Msg($e->getMessage());
}
return $result;
} //获取insert插入的id
public function lastinsertid()
{
return $this->PDO->lastinsertid();
} /*
*
* select 部分
* */
public function select($table,$fields="", $where="",$orderby="", $sort="",$limit="")
{
$fields = empty($fields) ? "*":$fields;
$sqlSelect=$this->sqlCreateSelect($table,$fields,$where,$orderby,$sort,$limit);
$this->query($sqlSelect,$where);
} //生成select sql
private function sqlCreateSelect($table,$fields="*", $where="",$orderby="", $sort="",$limit="")
{
$whereSql = empty($where)? " 1=1 ":$this->whereCreate($where);
$orderbySql = empty($orderby)? "":" order by ".$orderby." ".$sort;
$limitSql = empty($limit)? "":" limit ".$limit;
$sql="select $fields from $table where ".$whereSql.$orderbySql.$limitSql;
return $sql;
} private function whereCreate($where)
{
$whereSql="";
foreach($where as $key=>$val)
{
$whereSql.=" ".$key."=:".$key." and";
}
return $whereSql." 1=1 ";
} //执行select sql
private function query($sql,$where)
{
try{
$this->prepare = $this->PDO->prepare($sql); }catch (PDOException $e)
{
$this->Msg("预处理sql出错信息:".$e->getMessage()."<br>sql:(".$sql.")");
}
empty($where)? "":$this->bind($where);
$this->prepare ->execute();
}
private function bind($where)
{
foreach($where as $key=>$val)
{
$this->prepare->bindValue(":".$key,$val);
}
} /*select获取数据*/
//获取一条
public function selectOne()
{
$result=$this->prepare->fetch(PDO::FETCH_ASSOC);
return $result;
}
//获取全部数据
public function selectAll()
{
$result=$this->prepare->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
//获取查询记录数
public function selectCount()
{
$total = $this->prepare->rowCount();
return $total;
} }
PHP PDO类 单例的更多相关文章
- java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...
- 转 java 类 单例
转 单例概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一 ...
- 29 内置方法 eval | exec 元类 单例
eval与exec内置方法 将字符串作为执行目标,得到响应结果 eval常用作类型转换:该函数执行完有返回值 exec拥有执行更复杂的字符串:可以形成名称空间 eval内置函数的使用场景: 1.执 ...
- Python-元类 单例
2.元类 用于创建类的类 叫元类 默认元类都是type 主要控制类的创建__init__ 类的实例化__call__ 3.单例 一个类只有一个实例 什么时候用,大家公用一个打印机,没有必要每个人创建新 ...
- 【C#】类单例 可以解决全局变量的问题
单件模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点. 知道 详解
- NHibernate 帮助类(单例实际运用)
在NHibernate中,ISessionFactory是线程安全的,对应一个数据库.它是生成ISession的工厂.而ISession是线程不安全的. 创建一个ISessionFactory需要消耗 ...
- iOS中编写单例类的心得
单例 1.认识过的单例类有哪些: NSUserDefaults.NSNotificationCenter.NSFileManager.UIApplication 2.单例类 单例类某个类在代码编写时使 ...
- python__基础 : 类的__new__方法与实现一个单例
__new__ : 这个方法的作用主要是创建一个实例,在创建实例时首先会调用 __new__方法 ,然后调用__init__对实例进行初始化, 如果想修改 __new__ 这个方法,那么最后要 ret ...
- OC中的单例设计模式及单例的宏抽取
// 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 #pragma Person.h文件 #i ...
随机推荐
- POJ3694:Network(并查集+缩点+lca)
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13172 Accepted: 4774 题目链接:htt ...
- swift4.0闭包
http://blog.csdn.net/bddzzw/article/details/78276054
- [mysql]tpcc相关及画图
参考:http://blog.chinaunix.net/uid-26896862-id-3563600.html 参考:http://blog.chinaunix.net/uid-25266990- ...
- FreeRTOS - 如何根据FreeRTOS提供的功能(信号量、任务通知、队列等)设计程序
原文地址:http://www.cnblogs.com/god-of-death/p/6917837.html 1.二值信号量 就像一个标志位,事件产生置一,事件处理后直零 用于任务之间的同步,即一个 ...
- nodejs+react构建仿知乎的小Demo
一.命令行进入指定项目文件夹 二.相关命令安装环境和项目工具 npm init npm install react -- save npm install -g gulp npm install -- ...
- linux上抓包
使用tcpdump命令. 使用tcpdump -help查看其用法. -i eth0:在第一块网卡上进行抓包. -w filename.cap:将抓的保存到当前目录下的filename.cap文件中, ...
- poj 3376 Finding Palindromes
Finding Palindromes http://poj.org/problem?id=3376 Time Limit: 10000MS Memory Limit: 262144K ...
- SourceTree for mac 注册过程(v2.7.6a)
背景 为啥要自己注册呢,往上一堆一堆的老版本许可证偏不用,就愿意定制自己的账号style. 搞了半天,还是觉得pycharm自带的git工具就挺好用了,闲的没事记录一下. 要点 百度搜索的地址可以进入 ...
- Linux Shell下执行sqlplus
转载自: http://www.cnblogs.com/include/archive/2011/12/30/2307889.html 以下方法解决了在linux下自动的删除创建用户 sqlplus ...
- 【Contest Hunter【弱省胡策】Round #0-Flower Dance】组合数学+DP
题目链接: http://ch.ezoj.tk/contest/%E3%80%90%E5%BC%B1%E7%9C%81%E8%83%A1%E7%AD%96%E3%80%91Round%20%230/F ...