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 ...
随机推荐
- 解决 cmd dos 下 无法显示中文
在做程序开发的时候经常需要在使用命令行进行操作, dos环境本身是不支持中文的,有时候中文编码的问题就像苍蝇一样讨厌,下面提供几种常用的手段解决win7环境下中文显示乱码的问题: 方法一: 修改注册表 ...
- HDU1298 字典树+dfs
T9 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- JavaMail实现邮件的发送
1,拷贝mail.jar 和activation.jar到项目中 2,开启邮箱的 POP3/SMTP服务,以QQ邮箱为例 进去QQ邮箱-->设置-->账号-->进行设置如下图 注意: ...
- Why to Not Not Start a Startup
我花了周六,周日两天的时间,把这篇长文给阅读完了.很受益,改变了我的很多认知,也给我开拓了视野. 转载: Want to start a startup? Get funded by Y Combin ...
- 【bzoj1594-猜数游戏】线段树
题解: 矛盾只有两种情况: 一.先前确定了x在区间(l,r),但是现在发现x在区间(l1,r1),并且两个区间不相交. 二.一个区间的最小值是x,这个区间中有一个子区间的最小值比x更小. 首先可以明确 ...
- 【Foreign】Game [博弈论][DP]
Game Time Limit: 20 Sec Memory Limit: 512 MB Description 从前有个游戏.游戏分为 k 轮. 给定一个由小写英文字母组成的字符串的集合 S, 在 ...
- 基本控件文档-UISlider属性---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/C ...
- Berland National Library
题目链接:http://codeforces.com/problemset/problem/567/B 题目描述: Berland National Library has recently been ...
- python初步学习-python数据类型-列表(list)
列表 list 在 python 中具有非常强大的功能 定义 在python中,用方括号表示一个list:[] 在方括号里面,可以是 int,也可以是 str类型的数据,甚至也可以是Flase/Tru ...
- CentOS在ssh下远程重装系统
CentOS在ssh下远程重装系统 http://www.zxsdw.com/index.php/archives/913/ 国外VPS服务器一般都有控制面板,有很多种系统可自行安装,但国内有些IDC ...