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 ...
随机推荐
- noip模拟赛 保留道路
[问题描述] 很久很久以前有一个国家,这个国家有N个城市,城市由1,2,3,…,N标号,城市间有M条双向道路,每条道路都有两个属性g和s,两个城市间可能有多条道路,并且可能存在将某一城市与其自身连接起 ...
- hdoj 1299 Diophantus of Alexandria
hdoj 1299 Diophantus of Alexandria 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1299 题意:求 1/x + 1/y ...
- POJ 3984 BFS
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20665 Accepted: 12100 Descriptio ...
- linux内核挂载文件系统的两种方式
1.nfs方式(挂载的为文件夹) bootargs=root=/dev/nfs nfsroot=192.168.1.105:/mnt/rootfs/rootfs ip=192.168.1.88:192 ...
- annot refer to a non-final variable * inside an inner class defined in a different method"错误解析
在使用Java局部内部类或者匿名内部类时,若该类调用了所在方法的局部变量,则该局部变量必须使用final关键字来修饰,否则将会出现编译错误“Cannot refer to a non-final va ...
- 如何把自己写的python程序给别人用
这里讲的给别人用,不是指将你的代码开源,也不是指给另一个程序员用..... 前段时间写了个程序,输入URP学生系统的账号和密码,输出课表.绩点之类的信息,想给同学用,但是总不能叫别人也去装python ...
- js中style,currentStyle和getComputedStyle的区别以及获取css操作方法
在js中,之前我们获取属性大多用的都是ele.style.border这种形式的方法,但是这种方法是有局限性的,该方法只能获取到行内样式,获取不了外部的样式.所以呢下面我就教大家获取外部样式的方法,因 ...
- WCF使用注意事项
执行如下 批处理:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil.exe" http://127.0.0.1: ...
- Tomcat启动报错:org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalin
Error starting ApplicationContext. To display the auto-configuration report re-run your application ...
- 「6月雅礼集训 2017 Day7」电报
[题目大意] 有n个岛屿,第i个岛屿有有向发射站到第$p_i$个岛屿,改变到任意其他岛屿需要花费$c_i$的代价,求使得所有岛屿直接或间接联通的最小代价. $1 \leq n \leq 10^5, 1 ...