自写的利用PDO对mysql数据库增删改查操作类


Posted in PHP onFebruary 19, 2018

前言

PDO一是PHP数据对象(PHP Data Object)的缩写。

并不能使用PDO扩展本身执行任何数据库操作,必须使用一个database-specific PDO driver(针对特定数据库的PDO驱动)访问数据库服务器。

PDO并不提供数据库抽象,它并不会重写SQL或提供数据库本身缺失的功能,如果你需要这种功能,你需要使用一个更加成熟的抽象层。

最近在做项目时用到了PDO操作mysql数据库,于是自己写了一个类文件,命名为mysql_class.php文件代码如下:

示例代码

<?php
class mysql{
 //常量声明
 const DSN = "mysql:host=[数据库地址];dbname=[数据库名];charset=utf8";//数据库地址与数据库名及编码
 const USERNAME = "[数据库用户名]";//用户名
 const PASSWD = "[数据库密码]";//密码
 
 //私有变量声明
 private $sql = NULL;//sql语句缓存
 private $link = NULL;//数据库连接
 private $result = NULL;//结果
 
 /*******************************************************************************
  * @ 名称:建立连接
  * @ 属性:私有
 *******************************************************************************/
 private function connect(){
  try {
   $this->link = new \PDO(self::DSN, self::USERNAME, self::PASSWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));//创建连接
  }
  catch (PDOException $e) {
   die ("Error!:".$e->getMessage()."<hr/>");
  }
 }
 
 /*******************************************************************************
  * @ 名称:执行sql语句
  * @ 属性:私有
  * @ 入口参数:无
  * @ 出口参数:执行成功返回真,否则返回假,查询语句存储结果集数组
 *******************************************************************************/
 private function sql(){
  try {
   $this->connect();
   $this->link->beginTransaction();//开启一个事务
   $prepare = $this->link->prepare($this->sql);//准备查询语句
   $prepare->execute();//执行查询语句并返回结果集
   $cmd = strtolower(substr(trim($this->sql),0,6));//截取命令字符
   if($cmd == "select"){
    $array = $prepare->fetch(PDO::FETCH_ASSOC);//获取结果集中的所有数据
    if(count($array)){
     $this->result = NULL;
     $this->result = $array;//存储结果集
     return true;//查询到结果返回真
    }else{
     return false;//否则返回假
    }
   }else if($cmd == "insert" || $cmd == "delete" || $cmd == "update"){
    if($prepare){
     return true;//执行成功返回真
    }else{
     return false;//否则返回假
    }
   }
   $this->link->commit(); //如果正确执行完成那么确认commit
  } catch (PDOException $e) {
   $this->link->rollBack();//如果执行中有错误的情况下回滚
   die ("Error!:".$e->getMessage()."<hr/>");
  }
 }
 
 /*******************************************************************************
  * @ 名称:sql语句处理
  * @ 属性:公有
  * @ 入口参数:cmd增删改查字符命令;dsname数据表名;first第一个参数;second第二个参数;
  * @ 出口参数:执行成功返回真,否则返回假,查询操作返回结果集数组
  * @ 使用示例:
  $mysql->handle("insert","abc","openid,nickname","'123','abc'");//增加
  $mysql->handle("delete","abc","openid='123'");//删除
  $mysql->handle("update","abc","nickname='def'","openid='123'");//更新
  $res = $mysql->handle("select","abc","*","openid='123'");//查询
  if(is_array($res) == true){
   foreach($res as $key=>$val){
    echo $key."=".$val."<hr>";
   }
  }//遍历查询结果数组
 *******************************************************************************/
 public function handle($cmd,$dsname,$first,$second=NULL){
  switch($cmd){
   case 'insert'://插入
    $this->sql = "insert into $dsname ($first) values ($second)";
    break;
   case 'delete'://删除
    $this->sql = "delete from $dsname where $first";
    break;
   case 'update'://更新
    $this->sql = "update $dsname set $first where $second";
    break;
   case 'select'://查询
    $this->sql = "select $first from $dsname where $second";
    break;
   default:
    die ("Syntax Error!");//提示语法错误
    break;
  }
  
  $res = $this->sql();//执行sql语句
  if($res){
   if($cmd == 'select'){
    return $this->result;//返回查询结果
   }else{
    return true;//执行成功返回真
   }
  }else{
   return false;//否则返回假
  }
  $this->link=NULL;;//关闭数据库
 }
}
$mysql = new mysql;//数据库类的实例化
?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP中路径问题的解决方案
Oct 09 PHP
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP简单系统查询模块代码打包下载
Jun 07 PHP
php过滤危险html代码
Aug 18 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
教你php如何实现验证码
Jan 20 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
PHP如何使用JWT做Api接口身份认证的实现
Feb 03 PHP
PHP如何解决微信文章图片防盗链
Dec 09 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 #PHP
浅析PHP数据导出知识点
Feb 17 #PHP
PHP 应用容器化以及部署方法
Feb 12 #PHP
PHP使用Redis长连接的方法详解
Feb 12 #PHP
PHP长连接实现与使用方法详解
Feb 11 #PHP
搜索附近的人PHP实现代码
Feb 11 #PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 #PHP
You might like
一个显示天气预报的程序
2006/10/09 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
RC4文件加密的python实现方法
2015/06/30 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
python logging 日志的级别调整方式
2020/02/21 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
高等学院职业生涯规划书范文
2014/09/16 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2014年招商工作总结
2014/11/22 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB