php完美pdo类封装,PDO类的封装
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类的封装相关推荐
- 同时支持三个mysql+sqlite+pdo的php数据库类_同时支持三个MySQL+SQLite+PDO的PHP数据库类...
PHP学习教程文章简介: 同时支持三个MySQL+SQLite+PDO的PHP数据库类使用方法: // mysql connect $db = new SQL(mysql:host=localhost ...
- php pdo mysql类源码_完整示例php+pdo实现的购物车类
本文实例讲述了php+pdo实现的购物车类.分享给大家供大家参考,具体如下: session_start(); class Cart { public $pdo = null; public func ...
- php封装pdo实例以及pdo长连接的优缺点
文章目录 一.前言 二.为什么选择pdo 三.pdo的长连接 1.什么是pdo的长连接 2.长连接对nginx无效吗 3.php-fpm下的长连接测试 4.长连接对事务的影响 5.总结 四.pdo部分 ...
- php 仓储 sqlite_详解php封装db类连接sqlite3
sqlite3_open是sqlite数据库的api函数(C/C++),作用是打开(或创建)一个数据库文件.本文主要和大家分享php封装db类连接sqlite3 的知识,希望能帮助到大家.<?p ...
- 封装一个类搞定90%安卓客户端与服务器端交互
本实例封装了一个处理安卓客户端与服务器端交互的几个方法,对于中文乱码问题本实例也找到了解决方案.本例可以处理的场景如下: 1.与服务器端交互json数据. 2.Get方式与服务器端交互数据. 3.Po ...
- 封装时间转换工具类_推荐一款封装各种Util工具类,这款神仙级框架你值得拥有!...
点击上方 "Java指南者"关注, 星标或置顶一起成长 免费送 1024GB 精品学习资源 来源:ryanc.cc/archives/hutool-java-tools-lib 简 ...
- 初识类(classstruct)及C/C++封装的差异
初识类(class&struct) 面向对象三大特性:封装.继承和多态.其中不得不谈的就是类,通过类创建一个对象的过程叫实例化,实例化后使用对象可以调用类成员函数和成员变量,其中类成员函数称为 ...
- 第五讲 类的封装和类的继承
第五讲 类的封装和类的继承 主要内容 软件包的创建和使用 Java访问权限修饰词 类的访问权限修饰词 Java中类的层次结构和类的继承 对象的初始化再讨论 软件包的创建和使用 什么是软件包(pac ...
- python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略
python语言学习:python语言学习中的定义类.定义函数.封装api等详细攻略 目录 python语言学习中的定义类 python语言学习中的定义函数 python语言学习中封装api pyth ...
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button的command/Label/PhotoImage/封装为类)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button的command/Label/PhotoImage/封装为类) 目录 tkinter应用案例五 ...
最新文章
- 上帝视角任意切换:三维重建和图像渲染是怎么结合的?
- php service原理,轻松搞懂WebService工作原理
- 翻译:创建 Windows8 应用 Part I: Hello, world!
- Tornado源码分析 --- 静态文件处理模块
- 2016ICPC沈阳站
- Mybatis 详解--- 一级缓存、二级缓存
- STM32-Systick滴答定时器-延时函数
- Spring Cloud在云计算SaaS中的实战经验分享
- T61 拆机4短报警 续
- 绿联USB网卡的使用记录
- RStudio 使用ARM版Ruby mac M1 编译安装适用及x86Ruby安装使用 安装ARM版homebrew
- [Ant] [StartWithAnt] 第一章 一个简单的Ant例子
- 机器学习全生命周期,一步一步,中长篇(三)总共三篇
- 使用阿里邮箱发送邮件,邮件被反垃圾系统认定为垃圾邮件,导致邮件被系统退回。
- Code Review应该关注哪些点?
- 中考考试的指令广播_考试时间指令(铃声).doc
- Python 分类问题研究-Fisher线性判别
- python使用win32和flask实现接收请求发送QQ消息
- iOS手机端日志打印显示工具
- 古代日本人没有姓,只有名