借鉴别人的pdo类,慢慢研究

2024-05-26 16:18
文章标签 pdo 研究 借鉴 别人 慢慢

本文主要是介绍借鉴别人的pdo类,慢慢研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<?php
/**
  * PDO封装类,目的是为了使用起来更简单方便
  * modify Date: 2014-07-01
  */
class  PDOX {
     private  $pdo         = null;
     
     public   $statement  = null;
     
     public   $options  array (
         PDO::MYSQL_ATTR_INIT_COMMAND =>  "SET NAMES " ,
     );
     
     public  function  __construct( $dsn $user  '' $pass  '' $persistent  = false,  $charset  "utf8" ){
         $this ->options[PDO::MYSQL_ATTR_INIT_COMMAND] .=  $charset ;
         if ( $persistent ){
             $this ->options[PDO::ATTR_PERSISTENT] = true;
         }
         $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 ( empty ( $sql )){
             return  false;
         }
         $this ->statement =  $this ->pdo->prepare( $sql );
         return  $this ->statement;
     }
     /**
     执行Sql语句,一般用于 增、删、更新或者设置  返回影响的行数
     */
     public  function  exec ( $sql ){
         if ( empty ( $sql )){
             return  false;
         }
         try {
             return  $this ->pdo-> exec ( $sql );
         } catch (Exception  $e ){
             return  $e ->getMessage();
         }
     }
     /**
     执行有返回值的查询,返回PDOStatement  可以通过链式操作,可以通过这个类封装的操作获取数据
     */
     public  function  query( $sql ){
         if ( empty ( $sql )){
             return  false;
         }
         $this ->statement =  $this ->pdo->query( $sql );
         return  $this ->statement;
     }
     /**
     开启事务
     */
     public  function  beginTransaction(){
         return  $this ->pdo->beginTransaction();
     }
     /**
     提交事务
     */
     public  function  commit(){
         return  $this ->pdo->commit();
     }
     /**
     事务回滚
     */
     public  function  rollBack(){
         return  $this ->pdo->rollBack();
     }
     
     public  function  lastInertId(){
         return  $this ->pdo->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_type  = PDO::FETCH_ASSOC){
         if ( is_object ( $this ->statement)){
             return  $this ->statement->fetch( $fetch_type );
         }
         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_type  = PDO::FETCH_ASSOC,  $handle  '' ){
         if ( empty ( $handle )){
             return  $this ->statement->fetchAll( $fetch_type );
         }
         return  $this ->statement->fetchAll( $fetch_type $handle );
     }
     /**
     以对象形式返回 结果 跟fetch(PDO::FETCH_OBJ)一样
     */
     public  function  fetchObject( $class_name ){
         if ( empty ( $clss_name )){
             return  $this ->statement->fetchObject();
         }
         return  $this ->statement->fetchObject( $class_name );
     }
     
     public  function  fetchColumn( $intColumn  = 0){
         return  $this ->statement->fetchColumn( $intColumn );
     }
     
     /**
     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  'STR' $length  = 0){
         switch  ( $data_type ){
             case   'STR' :
                 $data_type  = PDO::PARAM_STR;
                 break ;
             case  'INT' :
                 $data_type  = PDO::PARAM_INT;
                 break ;
             default  :
                 $data_type  '' ;
                 break ;
         }
         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  columnCount(){
         $this ->statement->execute();
         return  $this ->statement->columnCount();
     }
     public  function  getColumnMeta( $intColumn ){
         return  $this ->statement->getColumnMeta( $intColumn );
     }
     
     
     /**
     关闭
     */
     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 [] =  "'"  $val  "'" ;
         }
         $sql   "INSERT INTO {$table} (" ;
         $sql  .= implode( "," $cols ) .  ") VALUES (" ;       
         $sql  .= implode( "," $vals ) .  ")" ;
         return  $this -> exec ( $sql );
     }
     public  function  insertBind( $table $arrayData ){
         if (! is_array ( $arrayData )){
             return  false;
         }
         $vals  array_keys ( $arrayData );
         $cols  array ();
         /*
         $arrayobject  = new  ArrayObject( $arrayData );
         $iterator        =  $arrayobject->getIterator();
         while($iterator->valid()) {
             $vals[] =  ':' . $iterator->key() . '';
             $iterator->next();
         }
         */
         $c       = implode( '' $vals );
         $cols  array_filter ( explode ( ':' $c ));
         $sql   "INSERT INTO {$table} (" ;
         $sql  .= implode( "," $cols ) .  ") VALUES (" ;       
         $sql  .= implode( "," $vals ) .  ")" ;
         
         $this ->statement =  $this ->pdo->prepare( $sql );
         $this ->statement->execute( $arrayData );
         return   $this ->statement->rowCount();
     }
     
     public  function  update( $table $data $where ){
         if (! is_array ( $data )){
             return  false;
         }
         $set  array ();
         foreach ( $data  as  $key  =>  $val ){
             $set [] =  $key  "='"  $val   "'" ;
         }
         $sql  "UPDATE {$table} SET " ;
         $sql  .= implode( "," $set );
         $sql  .=  " WHERE "  $where ;
         return  $this -> exec ( $sql );
     }
     public  function  updateBind( $sql $arrayWhere ){
         if ( empty ( $sql ) || ! is_array ( $arrayWhere )){
             return  false;
         }
         $this ->statement =  $this ->pdo->prepare( $sql );
         $this ->statement->execute( $arrayWhere );
         return  $this ->statement->rowCount();
     }
     
     public  function  delete ( $table $where ){
         if ( empty ( $table ) ||  empty ( $where )){
             return  false;
        
         $sql  "DELETE FROM {$table} WHERE "  $where ;
         return  $this -> exec ( $sql );
     }
     public  function  deleteBind( $sql $arrayWhere ){
         if ( empty ( $sql ) || ! is_array ( $arrayWhere )){
             return  false;
         }
         $this ->statement =  $this ->pdo->prepare( $sql );
         $this ->statement->execute( $arrayWhere );
         return  $this ->statement->rowCount();
     }
}
?>

这篇关于借鉴别人的pdo类,慢慢研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004960

相关文章

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

2024年全国大学生数学建模A题借鉴论文

问题  1: 舞龙队的动态位置与速度计算 1. **螺旋线的几何建模**:根据题目描述,舞龙队沿着等距螺旋线前进。螺旋线的螺距为 55 cm, 需根据极坐标公式确定每节板凳的位置。 -  极坐标螺旋线方程:\( r = a + b\theta \), 其中  \( b \)  是螺距, 可以利用该方程计算 每秒舞龙队的各个节数的坐标。 2. **速度计算**:给定龙头的行进速度为 1 m/s ,

[情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!

目录 前言: 一、说话的真实程度分级 二、说谎动机分级:善意谎言、中性谎言、恶意谎言 三、小心:所谓真相:只说对自己有利的真相 四、小心:所谓真相:就是别人想让你知道的真相 五、小心:所谓善解人意:就是别人只说你想要听到的话 前言: 何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相! 人与人交流话语中,处处充满了不真实,完全真实的只是其中一小部分,这

vue原理分析(六)--研究new Vue()

今天我们来分析使用new Vue() 之前研究时,只是说是在创建一个实例。并没有深入进行研究 在vue的源码中找下Vue的构造函数 function Vue(options) {if (!(this instanceof Vue)) {warn$2('Vue is a constructor and should be called with the `new` keyword');}thi

《中国全屋智能行业发展现状与投资前景研究分析报告》

报告导读:本报告从国际全屋智能发展、国内全屋智能政策环境及发展、研发动态、供需情况、重点生产企业、存在的问题及对策等多方面多角度阐述了全屋智能市场的发展,并在此基础上对全屋智能的发展前景做出了科学的预测,最后对全屋智能投资潜力进行了分析。  订购链接:https://www.yxresearch.com/ 第一章全屋智能行业概念界定及发展环境剖析 第一节全屋智能行业相关概念界定 一、智能家