一个基于PDO的数据库操作类(新) 一个PDO事务实例


Posted in PHP onJuly 03, 2011
<?php 
/* 
* 作者:胡睿 
* 日期:2011/03/19 
* 电邮:hooray0905@foxmail.com 
* 
* 20110319 
* 常用数据库操作,如:增删改查,获取单条记录、多条记录,返回最新一条插入记录id,返回操作记录行数等 
* 20110630 
* 整体修改方法,合并部分参数 
* 规范代码,一个方法里只有1个return语句 
*/ 
/* 
参数说明 
int $debug 是否开启调试,开启则输出sql语句 
int $mode 0 返回数组 
1 返回单条记录 
2 返回行数 
string $table 数据库表 
string $fields 需要查询的数据库字段,允许为空,默认为查找全部 
string $sqlwhere 查询条件,允许为空 
string $orderby 排序,允许为空,默认为id倒序 
*/ 
function hrSelect($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="id desc"){ 
global $pdo; 
if($debug){ 
if($mode == 2){ 
echo "select count(*) from $table where 1=1 $sqlwhere order by $orderby"; 
}elseif($mode == 1){ 
echo "select $fields from $table where 1=1 $sqlwhere"; 
}else{ 
echo "select $fields from $table where 1=1 $sqlwhere order by $orderby"; 
} 
exit; 
}else{ 
if($mode == 2){ 
$rs = $pdo->query("select count(*) from $table where 1=1 $sqlwhere order by $orderby"); 
$return = $rs->fetchColumn(); 
}elseif($mode == 1){ 
$rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere"); 
$return = $rs->fetch(); 
}else{ 
$rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere order by $orderby"); 
$return = $rs->fetchAll(); 
} 
return $return; 
} 
} 
/* 
参数说明 
int $debug 是否开启调试,开启则输出sql语句 
int $mode 0 默认insert,无返回信息 
1 返回执行条目数 
2 返回最后一次插入记录的id 
string $table 数据库表 
string $fields 需要插入数据库的字段 
string $values 需要插入数据库的信息,必须与$fields一一对应 
*/ 
function hrInsert($debug, $mode, $table, $fields, $values){ 
global $pdo; 
if($debug){ 
echo "insert into $table ($fields) values ($values)"; 
exit; 
}else{ 
if($mode == 2){ 
$return = $pdo->lastInsertId("insert into $table ($fields) values ($values)"); 
}elseif($mode == 1){ 
$return = $pdo->exec("insert into $table ($fields) values ($values)"); 
}else{ 
$pdo->query("insert into $table ($fields) values ($values)"); 
exit; 
} 
return $return; 
} 
} 
/* 
参数说明 
int $debug 是否开启调试,开启则输出sql语句 
int $mode 0 默认update,无返回信息 
1 返回执行条目数 
string $table 数据库表 
string $set 需要更新的字段及内容,格式:a='abc',b=2,c='2010-10-10 10:10:10' 
string $sqlwhere 修改条件,允许为空 
*/ 
function hrUpdate($debug, $mode, $table, $set, $sqlwhere=""){ 
global $pdo; 
if($debug){ 
echo "update $table set $set where 1=1 $sqlwhere"; 
exit; 
}else{ 
if($mode==1){ 
$return = $pdo->exec("update $table set $set where 1=1 $sqlwhere"); 
}else{ 
$pdo->query("update $table set $set where 1=1 $sqlwhere"); 
exit; 
} 
return $return; 
} 
} 
/* 
参数说明 
int $debug 是否开启调试,开启则输出sql语句 
int $mode 0 默认delete,无返回信息 
1 返回执行条目数 
string $table 数据库表 
string $sqlwhere 删除条件,允许为空 
*/ 
function hrDelete($debug, $mode, $table, $sqlwhere=""){ 
global $pdo; 
if($debug){ 
echo "delete from $table where 1=1 $sqlwhere"; 
exit; 
}else{ 
if($mode == 1){ 
$return = $pdo->exec("delete from $table where 1=1 $sqlwhere"); 
}else{ 
$pdo->query("delete from $table where 1=1 $sqlwhere"); 
exit; 
} 
return $return; 
} 
} 
?>

另外一段代码是基于我这个数据库操作类的事务实例:
/* 
注意,数据库操作表类型必须为InnoDB,其他类型不支持事务 
PDO事务机制 
$pdo->beginTransaction(); --开启事务 
$pdo->commit(); --结束事务 
$pdo->rollBack(); --回滚操作 示例,用try/catch包住db操作,当事务内的db操作出现中断,则执行回滚并抛出异常信息。 
*/ 
try{ 
$pdo->beginTransaction(); 
hrInsert(0,1,"class","name,parentid","'god',0"); //可以正常执行 
hrInsert(0,0,0,"tb_searchlog","userid,code","4"); //出错 
$pdo->commit(); 
}catch(Exception $e){ 
$pdo->rollBack(); 
echo "Failed: " . $e->getMessage(); 
}

代码下载:点击下载
PHP 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
详解PHP显示MySQL数据的三种方法
Jun 05 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
Oct 22 PHP
PHP 防恶意刷新实现代码
May 16 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
php类常量用法实例分析
Jul 09 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
TP3.2框架分页相关实现方法分析
Jun 03 PHP
YII2 全局异常处理深入讲解
Mar 24 PHP
PHP array_multisort()函数的使用札记
Jul 03 #PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 #PHP
PHP include_path设置技巧分享
Jul 03 #PHP
php array_intersect比array_diff快(附详细的使用说明)
Jul 03 #PHP
php header Content-Type类型小结
Jul 03 #PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 #PHP
PHP采集利器 Snoopy 试用心得
Jul 03 #PHP
You might like
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
理解Javascript闭包
2013/11/01 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
js中跨域方法原理详解
2015/07/19 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
python3图片转换二进制存入mysql
2013/12/06 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
python实现键盘控制鼠标移动
2020/11/27 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
python 为什么说eval要慎用
2019/03/26 Python
Django时区详解
2019/07/24 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
京剧自荐信
2014/01/26 职场文书
运动会通讯稿400字
2014/01/28 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
Golang 遍历二叉树
2022/04/19 Golang