PDO类的封装

1. PDO类.rar

2.PHP代码<?php

/**

* Created by tudou.

* Date: 13-2-4

* Time: 下午9:57

*/

/**

其他未实现的

1、绑定列到php变量请使用 $db->statement->bindColumn(1,$name);

*/

class pdo_class {

private $pdo = null;

public $statement = null;

private $is_addsla = false;

public $options = array(

PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ",

);

public function __construct($host,$user="root",$pass="",$dbname="",$persistent=false,$charset="utf8"){

$this->options[PDO::MYSQL_ATTR_INIT_COMMAND] .= $charset;

if($persistent){

$this->options[PDO::ATTR_PERSISTENT] = true;

}

$dsn = "mysql:host={$host};dbname={$dbname}";

$this->pdo = new PDO($dsn,$user,$pass,$this->options);

}

/**

全局属性设置,包括:列名格式和错误提示类型 可以使用数字也能直接使用参数

*/

public function setAttr($param,$val=''){

if(is_array($param)){

foreach($param as $key=>$val){

$this->pdo->setAttribute($key,$val);

}

}else{

if($val!=''){

$this->pdo->setAttribute($param,$val);

}else{

return false;

}

}

}

/**

生成一个编译好的sql语句模版 你可以使用 ? :name 的形式

返回一个statement对象

*/

public function prepare($sql=""){

if($sql==""){

return false;

}

$this->statement = $this->pdo->prepare($sql);

return $this->statement;

}

/**

执行Sql语句,一般用于 增、删、更新或者设置 返回影响的行数

*/

public function exec($sql){

if($sql==""){

return false;

}

try{

return $this->pdo->exec($sql);

}catch(Exception $e){

return $e->getMessage();

}

}

/**

执行有返回值的查询,返回PDOStatement 可以通过链式操作,可以通过这个类封装的操作获取数据

*/

public function query($sql){

if($sql=""){

return false;

}

$this->statement = $this->pdo->query($sql);

return $this->statement;

}

/**

开启事务

*/

public function beginTA(){

return $this->pdo->beginTransaction();

}

/**

提交事务

*/

public function commit(){

return $this->pdo->commit();

}

/**

事务回滚

*/

public function rollBack(){

return $this->pdo->rollBack();

}

public function lastInertId(){

return $db->lastInsertId();

}

//** PDOStatement 类操作封装 **//

/**

让模版执行SQL语句,1、执行编译好的 2、在执行时编译

*/

public function execute($param=""){

if(is_array($param)){

try{

return $this->statement->execute($param);

}catch (Exception $e){

//return $this->errorInfo();

return $e->getMessage();

}

}else{

try{

return $this->statement->execute();

}catch(Exception $e){

/* 返回的错误信息格式

[0] => 42S22

[1] => 1054

[2] => Unknown column 'col' in 'field list'

return $this->errorInfo();

*/

return $e->getMessage();

}

}

}

/**

参数1说明:

PDO::FETCH_BOTH 也是默认的,两者都有(索引,关联)

PDO::FETCH_ASSOC 关联数组

PDO::FETCH_NUM 索引

PDO::FETCH_OBJ 对象

PDO::FETCH_LAZY 对象 会附带queryString查询SQL语句

PDO::FETCH_BOUND 如果设置了bindColumn,则使用该参数

*/

public function fetch($fetch_style=PDO::FETCH_BOTH){

if(is_object($this->statement)){

return $this->statement->fetch($fetch_style);

}else{

return false;

}

}

/**

参数1说明:

PDO::FETCH_BOTH 也是默认的,两者都有(索引,关联)

PDO::FETCH_ASSOC 关联数组

PDO::FETCH_NUM 索引

PDO::FETCH_OBJ 对象

PDO::FETCH_COLUMN 指定列 参数2可以指定要获取的列

PDO::FETCH_CLASS 指定自己定义的类

PDO::FETCH_FUNC 自定义类 处理返回的数据

PDO_FETCH_BOUND 如果你需要设置bindColumn,则使用该参数

参数2说明:

给定要处理这个结果的类或函数

*/

public function fetchAll($fetch_style=PDO::FETCH_BOTH,$handle=''){

if($handle!=''){

return $this->statement->fetchAll($fetch_style,$handle);

}else{

return $this->statement->fetchAll($fetch_style);

}

}

/**

以对象形式返回 结果 跟fetch(PDO::FETCH_OBJ)一样

*/

public function fetchObject($class_name){

if($clss_name!=''){

return $this->statement->fetchObject($class_name);

}else{

return $this->statement->fetchObject();

}

}

/**

public function bindColumn($array=array(),$type=EXTR_OVERWRITE){

if(count($array)>0){

extract($array,$type);

}

//$this->statement->bindColumn()

}

*/

/**

以引用的方式绑定变量到占位符(可以只执行一次prepare,执行多次bindParam达到重复使用的效果)

*/

public function bindParam($parameter,$variable,$data_type=PDO::PARAM_STR,$length=6){

return $this->statement->bindParam($parameter,$variable,$data_type,$length);

}

/**

返回statement记录集的行数

*/

public function rowCount(){

return $this->statement->rowCount();

}

public function count(){

return $this->statement->rowCount();

}

/**

关闭编译的模版

*/

public function close(){

return $this->statement->closeCursor();

}

public function closeCursor(){

return $this->statement->closeCursor();

}

/**

返回错误信息也包括错误号

*/

private function errorInfo(){

return $this->statement->errorInfo();

}

/**

返回错误号

*/

private function errorCode(){

return $this->statement->errorCode();

}

//简化操作

public function insert($table,$data){

if(!is_array($data)){

return false;

}

$cols = array();

$vals = array();

foreach($data as $key=>$val){

$cols[]=$key;

$vals[]="'".$this->addsla($val)."'";

}

$sql = "INSERT INTO {$table} (";

$sql .= implode(",",$cols).") VALUES (";

$sql .= implode(",",$vals).")";

return $this->exec($sql);

}

public function update($table,$data,$where=""){

if(!is_array($data)){

return false;

}

$set = array();

foreach($data as $key=>$val){

$set[] = $key."='".trim($this->addsla($val))."'";

}

$sql = "UPDATE {$table} SET ";

$sql .= implode(",",$set);

$sql .= " WHERE ".$where;

return $this->exec($sql);

}

public function delete($table,$where=""){

$sql = "DELETE FROM {$table} WHERE ".$where;

return $this->exec($sql);

}

private function addsla($data){

if($this->is_addsla){

return trim(addslashes($data));

}

return $data;

}

}

以上就是PDO类的封装的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php完美pdo类封装,PDO类的封装相关推荐

  1. 同时支持三个mysql+sqlite+pdo的php数据库类_同时支持三个MySQL+SQLite+PDO的PHP数据库类...

    PHP学习教程文章简介: 同时支持三个MySQL+SQLite+PDO的PHP数据库类使用方法: // mysql connect $db = new SQL(mysql:host=localhost ...

  2. php pdo mysql类源码_完整示例php+pdo实现的购物车类

    本文实例讲述了php+pdo实现的购物车类.分享给大家供大家参考,具体如下: session_start(); class Cart { public $pdo = null; public func ...

  3. php封装pdo实例以及pdo长连接的优缺点

    文章目录 一.前言 二.为什么选择pdo 三.pdo的长连接 1.什么是pdo的长连接 2.长连接对nginx无效吗 3.php-fpm下的长连接测试 4.长连接对事务的影响 5.总结 四.pdo部分 ...

  4. php 仓储 sqlite_详解php封装db类连接sqlite3

    sqlite3_open是sqlite数据库的api函数(C/C++),作用是打开(或创建)一个数据库文件.本文主要和大家分享php封装db类连接sqlite3 的知识,希望能帮助到大家.<?p ...

  5. 封装一个类搞定90%安卓客户端与服务器端交互

    本实例封装了一个处理安卓客户端与服务器端交互的几个方法,对于中文乱码问题本实例也找到了解决方案.本例可以处理的场景如下: 1.与服务器端交互json数据. 2.Get方式与服务器端交互数据. 3.Po ...

  6. 封装时间转换工具类_推荐一款封装各种Util工具类,这款神仙级框架你值得拥有!...

    点击上方 "Java指南者"关注, 星标或置顶一起成长 免费送 1024GB 精品学习资源 来源:ryanc.cc/archives/hutool-java-tools-lib 简 ...

  7. 初识类(classstruct)及C/C++封装的差异

    初识类(class&struct) 面向对象三大特性:封装.继承和多态.其中不得不谈的就是类,通过类创建一个对象的过程叫实例化,实例化后使用对象可以调用类成员函数和成员变量,其中类成员函数称为 ...

  8. 第五讲 类的封装和类的继承

    第五讲 类的封装和类的继承 主要内容 软件包的创建和使用 Java访问权限修饰词 类的访问权限修饰词 Java中类的层次结构和类的继承 对象的初始化再讨论   软件包的创建和使用 什么是软件包(pac ...

  9. python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略

    python语言学习:python语言学习中的定义类.定义函数.封装api等详细攻略 目录 python语言学习中的定义类 python语言学习中的定义函数 python语言学习中封装api pyth ...

  10. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button的command/Label/PhotoImage/封装为类)

    Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button的command/Label/PhotoImage/封装为类) 目录 tkinter应用案例五 ...

最新文章

  1. 上帝视角任意切换:三维重建和图像渲染是怎么结合的?
  2. php service原理,轻松搞懂WebService工作原理
  3. 翻译:创建 Windows8 应用 Part I: Hello, world!
  4. Tornado源码分析 --- 静态文件处理模块
  5. 2016ICPC沈阳站
  6. Mybatis 详解--- 一级缓存、二级缓存
  7. STM32-Systick滴答定时器-延时函数
  8. Spring Cloud在云计算SaaS中的实战经验分享
  9. T61 拆机4短报警 续
  10. 绿联USB网卡的使用记录
  11. RStudio 使用ARM版Ruby mac M1 编译安装适用及x86Ruby安装使用 安装ARM版homebrew
  12. [Ant] [StartWithAnt] 第一章 一个简单的Ant例子
  13. 机器学习全生命周期,一步一步,中长篇(三)总共三篇
  14. 使用阿里邮箱发送邮件,邮件被反垃圾系统认定为垃圾邮件,导致邮件被系统退回。
  15. Code Review应该关注哪些点?
  16. 中考考试的指令广播_考试时间指令(铃声).doc
  17. Python 分类问题研究-Fisher线性判别
  18. python使用win32和flask实现接收请求发送QQ消息
  19. iOS手机端日志打印显示工具
  20. 古代日本人没有姓,只有名

热门文章

  1. 英剧推荐【IT狂人】
  2. Combating Spyware in the Enterprise
  3. Python使用Win32和天行机器人API实现微信自动聊天机器人(自动敷衍机器人)
  4. 21 年年度最佳开源软件!
  5. 怎么把Epub转换成PDF格式?分享两种简单好用的转换方法
  6. 考拉情书---一片道歉叶
  7. Taylor’s Formula - 泰勒公式
  8. 《哈利波特》购书最低折扣
  9. 动态SQL之choose
  10. EtherNet IP /Modbus(通用串口)网关ENB-301MI