<?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. Codeforces Round #344 (Div. 2) B

    B. Print Check time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  2. select和epoll概念

    关于linux的I/O复用接口select和epoll,下列说法错误的是() select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历 select的最大连接数为FD_SETSIZ ...

  3. ACE服务端编程1:使用VS2010编译ACE6.0及从ACE5.6升级的注意事项

    ACE是一个跨平台的用于并发通信的C++框架,项目开始时使用的是ACE 5.6发布版,目前最新的ACE版本是6.3.0. 网上一直有一种黑ACE的氛围,主要黑点在于ACE的复杂和作者的背景,结合实际应 ...

  4. [LeetCode] 大数问题,相加和相乘,题 Multiply Strings

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  5. asyncio 实现 aiohttp

    #asyncio 没有提供http协议的接口 aiohttp import asyncio import socket from urllib.parse import urlparse async ...

  6. Jmeter-6-创建数据库测试计划

    1. 将mysql 的jdbc的jar包放到Jmeter lib的目录下. 2. 创建线程组. 3. 创建JDBC Connection Configuration, 提供详细的数据库配置信息. 4. ...

  7. 【BZOJ】1699 [Usaco2007 Jan]Balanced Lineup排队

    [算法]线段树 #include<cstdio> #include<cctype> #include<algorithm> using namespace std; ...

  8. .NET Core Data Access

    .NET Core was released a few months ago, and data access libraries for most databases, both relation ...

  9. bzoj 1503 平衡树

    我们可以用一颗平衡树维护每个人的工资,因为工资的变化会影响到后面所有的人,所以我们打一个标签,向平衡树里插入的时候减去这个标签的值,这样代表改变了之后的零点,,这样维护这个标签就好了,输出的时候要加上 ...

  10. 移动端页面使用rem布局

    阿里团队的高清布局方案代码 所谓高清方案就是根据设备屏幕的DPR(设备像素比,又称DPPX,比如dpr=2时,表示1个CSS像素由4个物理像素点组成) 动态设置 html 的font-size, 同时 ...