自写的利用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 代码优化之经典示例
Mar 24 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php表单敏感字符过滤类
Dec 08 PHP
php绘制一个扇形的方法
Jan 24 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP在线书签系统分享
Jan 04 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
Mar 15 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
python能否java成为主流语言吗
2020/06/22 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
伊索寓言教学反思
2014/05/01 职场文书
通讯稿格式及范文
2015/07/22 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis