一个基于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 相关文章推荐
最令PHP初学者们头痛的十四个问题
Jan 15 PHP
dedecms模板标签代码官方参考
Mar 17 PHP
PHP游戏编程25个脚本代码
Feb 08 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
jQuery Mobile + PHP实现文件上传
Dec 12 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
php数值计算num类简单操作示例
May 15 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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
jquery解析xml字符串简单示例
2014/04/11 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
Node.js事件的正确使用方法
2019/04/05 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
Tostadora意大利:定制T恤
2019/04/08 全球购物
老师自我鉴定范文
2013/12/25 职场文书
办护照工作证明范本
2014/01/14 职场文书
运动会稿件200字
2014/02/07 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
MySQL Router的安装部署
2021/04/24 MySQL
Golang map映射的用法
2022/04/22 Golang