<?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类 单例的更多相关文章

  1. java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作

    ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...

  2. 转 java 类 单例

    转 单例概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一 ...

  3. 29 内置方法 eval | exec 元类 单例

    eval与exec内置方法 将字符串作为执行目标,得到响应结果 eval常用作类型转换:该函数执行完有返回值 exec拥有执行更复杂的字符串:可以形成名称空间 eval内置函数的使用场景:   1.执 ...

  4. Python-元类 单例

    2.元类 用于创建类的类 叫元类 默认元类都是type 主要控制类的创建__init__ 类的实例化__call__ 3.单例 一个类只有一个实例 什么时候用,大家公用一个打印机,没有必要每个人创建新 ...

  5. 【C#】类单例 可以解决全局变量的问题

    单件模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点. 知道 详解

  6. NHibernate 帮助类(单例实际运用)

    在NHibernate中,ISessionFactory是线程安全的,对应一个数据库.它是生成ISession的工厂.而ISession是线程不安全的. 创建一个ISessionFactory需要消耗 ...

  7. iOS中编写单例类的心得

    单例 1.认识过的单例类有哪些: NSUserDefaults.NSNotificationCenter.NSFileManager.UIApplication 2.单例类 单例类某个类在代码编写时使 ...

  8. python__基础 : 类的__new__方法与实现一个单例

    __new__ : 这个方法的作用主要是创建一个实例,在创建实例时首先会调用 __new__方法 ,然后调用__init__对实例进行初始化, 如果想修改 __new__ 这个方法,那么最后要 ret ...

  9. OC中的单例设计模式及单例的宏抽取

    // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 #pragma Person.h文件 #i ...

随机推荐

  1. Nginx反向代理两个tomcat服务器

    第一步,在Linux上安装两个tomcat,修改好端口号后,启动起来. 第二步,配置本地的DNS解析,即修改host文件: 第三步,配置Nginx配置文件 反向代理的配置虚拟主机配置差不多也要配置虚拟 ...

  2. HDU 4348 主席树区间更新

    To the moon Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  3. NYOJ 832 DP

    合并游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 大家都知道Yougth除了热爱编程之外,他还有一个爱好就是喜欢玩. 某天在河边玩耍的时候,他发现了一种神奇的 ...

  4. 浏览器发送URL的编码特性

    转载自:http://blog.csdn.net/wangjun_1218/article/details/4330244 浏览器发送URL的编码特性 尽管有很多规范URL的标准,例如RFC 3987 ...

  5. (转)史上最好的Python线程指南

    来自AstalWind的好文,彻底认识python线程 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html . . . . .

  6. mysql Innodb索引

    基本概念 对于mysql目前的默认存储引擎Innodb来说,索引分为2个,一个是聚集索引,一个是普通索引(也叫二级索引). 聚集索引:聚集索引的顺序和数据在磁盘的顺序一致,因此查询时使用聚集索引,效率 ...

  7. Installing JDK7 on Ubuntu

    1. # sudo add-apt-repository ppa:webupd8team/java 2.  # sudo apt-get update 3.  # sudo apt-get insta ...

  8. sqlserver xml转表 及(cross apply与outer apply)

    一. 需求是需要把','分割的字符串转为表,便于做关联查询,于是发现可以通过xml转为表,如下: declare @XXX xml set @XXX = ' <v> <aa>1 ...

  9. Parallel

    介绍 C# 4.0 的新特性之并行运算 Parallel.For - for 循环的并行运算 Parallel.ForEach - foreach 循环的并行运算 Parallel.Invoke - ...

  10. 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径

    [题意]给定无向连通图,要求添加最少的边使全图变成边双连通分量. [算法]Tarjan缩点 [题解]首先边双缩点,得到一棵树(无向无环图). 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直 ...