当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-17 19:06:46 浏览: 评论:0 

本文实例讲述了PHP基于pdo的数据库操作类,分享给大家供大家参考,具体如下:

工作中需要操作sqlserver、oracle都是使用的这个类,当时是在别人的基础上改进了,现在分享下:

  1. <?php 
  2. class Pdodb{ 
  3.   protected $pdo
  4.   protected $res
  5.   protected $config
  6.   /*构造函数*/ 
  7.   function __construct($config){ 
  8.     $this->Config = $config
  9.     $this->connect(); 
  10.   } 
  11.   /*数据库连接*/ 
  12.   public function connect(){ 
  13.     try { 
  14.        $this->pdo= new PDO($this->Config['dsn'], $this->Config['username'], $this->Config['password']);//$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
  15.        $this->pdo->query("set names utf8"); 
  16.     }catch(Exception $e){ 
  17.       echo '数据库连接失败,详情: ' . $e->getMessage () . ' 请在配置文件中数据库连接信息'
  18.       exit (); 
  19.     } 
  20.     /* 
  21.     if($this->Config['type']=='oracle'){ 
  22.       $this->pdo->query("set names {$this->Config['charset']};"); 
  23.     }else{ 
  24.       $this->pdo->query("set names {$this->Config['charset']};"); 
  25.     } 
  26.     */ 
  27.     //把结果序列化成stdClass 
  28.     //$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 
  29.     //自己写代码捕获Exception 
  30.     //$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
  31.     $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//属性名 属性值 数组以关联数组返回 
  32.   } 
  33.   /*数据库关闭*/ 
  34.   public function close(){ 
  35.     $this->pdo = null; 
  36.   } 
  37.   //用于有记录结果返回的操作,特别是SELECT操作 
  38.   public function query($sql,$return=false){ 
  39.     $res = $this->pdo->query($sql); 
  40.     if($res){ 
  41.       $this->res = $res// 未返回 return $this->res; 
  42.     } 
  43.     if($return){ 
  44.       return $res
  45.     } 
  46.   } 
  47.   //主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作 
  48.   public function exec($sql,$return=false){ 
  49.     $res = $this->pdo->exec($sql); 
  50.     if($res){ 
  51.       $this->res = $res
  52.     } 
  53.     if($return){//返回操作是否成功 成功返回1 失败0 
  54.       return $res
  55.     } 
  56.   } 
  57.   //将$this->res以数组返回(全部返回) 
  58.   public function fetchAll(){ 
  59.     return $this->res->fetchAll(); 
  60.   } 
  61.   //将$this->res以数组返回(一条记录) 
  62.   public function fetch(){ 
  63.     return $this->res->fetch(); 
  64.   } 
  65.   //返回所有字段 
  66.   public function fetchColumn(){ 
  67.     return $this->res->fetchColumn(); 
  68.   } 
  69.   //返回最后插入的id 
  70.   public function lastInsertId(){ 
  71.     return $this->res->lastInsertId(); 
  72.   } 
  73.   //返回最后插入的id 
  74.   public function lastInsertId2(){ 
  75.     return $this->pdo->lastInsertId(); 
  76.   } 
  77.   /** 
  78.   * 参数说明 
  79.   * string/array $table 数据库表,两种传值模式 
  80.   * 普通模式: 
  81.   * 'tb_member, tb_money' 
  82.   * 数组模式: 
  83.   * array('tb_member', 'tb_money') 
  84.   * string/array $fields 需要查询的数据库字段,允许为空,默认为查找全部,两种传值模式 
  85.   * 普通模式: 
  86.   * 'username, password' 
  87.   * 数组模式: 
  88.   * array('username', 'password') 
  89.   * string/array $sqlwhere 查询条件,允许为空,两种传值模式 
  90.   * 普通模式(必须加上and,$sqlwhere为空 1=1 正常查询): 
  91.   * 'and type = 1 and username like "%os%"' 
  92.   * 数组模式: 
  93.   * array('type = 1', 'username like "%os%"') 
  94.   * string $orderby 排序,默认为id倒序 
  95.   *int $debug 是否开启调试,开启则输出sql语句 
  96.   * 0 不开启 
  97.   * 1 开启 
  98.   * 2 开启并终止程序 
  99.   * int $mode 返回类型 
  100.   * 0 返回多条记录 
  101.   * 1 返回单条记录 
  102.   * 2 返回行数 
  103.   */ 
  104.   public function select($table$fields="*"$sqlwhere=""$orderby=""$debug=0, $mode=0){ 
  105.     //参数处理 
  106.     if(is_array($table)){ 
  107.       $table = implode(', '$table); 
  108.     } 
  109.     if(is_array($fields)){ 
  110.       $fields = implode(',',$fields); 
  111.       /* 
  112.       if($this->Config['type']=='oracle'){ 
  113.         //$fields = implode(',',$fields);//CUSTOMER_ID,FIRST_NAME,LAST_NAME,EMAIL 
  114.         //$fields = implode(",'UTF8','ZHS16GBK') ,convert(",$fields); 
  115.         //$fields="convert(".$fields.",'UTF8','ZHS16GBK')"; 
  116.       }else{ 
  117.         $fields = implode(',',$fields); 
  118.       } 
  119.       */ 
  120.     } 
  121.     if(is_array($sqlwhere)){ 
  122.       $sqlwhere = ' and '.implode(' and '$sqlwhere); 
  123.     } 
  124.     //数据库操作 
  125.     if($debug === 0){ 
  126.       if($mode === 2){ //统计 
  127.         $this->query("select count(*) from $table where 1=1 $sqlwhere"); 
  128.         $return = $this->fetchColumn(); 
  129.       }else if($mode === 1){ //返回一条 
  130.         $this->query("select $fields from $table where 1=1 $sqlwhere $orderby"); 
  131.         $return = $this->fetch(); 
  132.       }else
  133.         $this->query("select $fields from $table where 1=1 $sqlwhere $orderby"); 
  134.         $return = $this->fetchAll();//如果 $this->res为空即sql语句错误 会提示Call to a member function fetchAll() on a non-object 
  135.       } 
  136.       return $return
  137.     }else
  138.         if($mode === 2){ 
  139.           echo "select count(*) from $table where 1=1 $sqlwhere"
  140.         }else if($mode === 1){ 
  141.           echo "select $fields from $table where 1=1 $sqlwhere $orderby"
  142.         }else
  143.           echo "select $fields from $table where 1=1 $sqlwhere $orderby"
  144.         } 
  145.         if($debug === 2){ 
  146.           exit
  147.         } 
  148.     } 
  149.   } 
  150.   /** 
  151.   * 参数说明 
  152.   * string/array $table 数据库表,两种传值模式 
  153.   * 普通模式: 
  154.   * 'tb_member, tb_money' 
  155.   * 数组模式: 
  156.   * array('tb_member', 'tb_money') 
  157.   * string/array $set 需要插入的字段及内容,两种传值模式 
  158.   * 普通模式: 
  159.   * 'username = "test", type = 1, dt = now()' 
  160.   * 数组模式: 
  161.   * array('username = "test"', 'type = 1', 'dt = now()') 
  162.   * int $debug 是否开启调试,开启则输出sql语句 
  163.   * 0 不开启 
  164.   * 1 开启 
  165.   * 2 开启并终止程序 
  166.   * int $mode 返回类型 
  167.   * 0 无返回信息 
  168.   * 1 返回执行条目数 
  169.   * 2 返回最后一次插入记录的id 
  170.   */ 
  171.   public function oic_insert($table$set$debug=0, $mode=0){ 
  172.     //参数处理 
  173.     if(is_array($table)){ 
  174.       $table = implode(', '$table); 
  175.     } 
  176.     if(is_array($set)){ 
  177.       $s='';$i=0; 
  178.       foreach($set as $k=>$v){ 
  179.         $i++; 
  180.         $s[$i]=$k;//,连接 
  181.         $val[$i]=$v
  182.       } 
  183.       $sarr=implode(",",$s);//去掉最后一个, 
  184.       //array_pop($sarr); 
  185.       $set=implode("','",$val);////15221579236','张三','','2001','8','4','女','是 
  186.       //$set = implode(', ', $set); 
  187.     } 
  188.     //数据库操作 
  189.     if($debug === 0){ 
  190.       if($mode === 2){ 
  191.         $this->query("insert into $table ($sarr) values('".$set."')"); 
  192.         //$return = $this->lastInsertId(); 
  193.       }else if($mode === 1){ 
  194.         $this->exec("insert into $table ($sarr) values('".$set."')"); 
  195.         $return = $this->res; 
  196.       }else
  197.         $this->query("insert into $table ($sarr) values('".$set."')"); 
  198.         $return = NULL; 
  199.       } 
  200.       return $return
  201.     }else
  202.       echo "insert into $table ($sarr) values('".$set."')"
  203.       if($debug === 2){ 
  204.         exit
  205.       } 
  206.     } 
  207.   } 
  208.   public function insert($table$set$debug=0, $mode=0){ 
  209.     //参数处理 
  210.     if(is_array($table)){ 
  211.       $table = implode(', '$table); 
  212.     } 
  213.     if(is_array($set)){ 
  214.       $s=''
  215.       foreach($set as $k=>$v){ 
  216.         $s.=$k."='".$v."',";//,连接 
  217.       } 
  218.       $sarr=explode(',',$s);//去掉最后一个, 
  219.       array_pop($sarr); 
  220.       $set=implode(',',$sarr); 
  221.       //$set = implode(', ', $set); 
  222.     } 
  223.     //数据库操作 
  224.     if($debug === 0){ 
  225.       if($mode === 2){ 
  226.         $this->query("insert into $table set $set"); 
  227.         $return = $this->pdo->lastInsertId(); 
  228.       }else if($mode === 1){ 
  229.         $this->exec("insert into $table set $set"); 
  230.         $return = $this->res; 
  231.       }else
  232.         $this->query("insert into $table set $set"); 
  233.         $return = NULL; 
  234.       } 
  235.       return $return
  236.     }else
  237.       echo "insert into $table set $set"
  238.       if($debug === 2){ 
  239.         exit
  240.       } 
  241.     } 
  242.   } 
  243.   /** 
  244.   * 参数说明 
  245.   * string $table 数据库表,两种传值模式 
  246.   * 普通模式: 
  247.   * 'tb_member, tb_money' 
  248.   * 数组模式: 
  249.   * array('tb_member', 'tb_money') 
  250.   * string/array $set 需要更新的字段及内容,两种传值模式 
  251.   * 普通模式: 
  252.   * 'username = "test", type = 1, dt = now()' 
  253.   * 数组模式: 
  254.   * array('username = "test"', 'type = 1', 'dt = now()') 
  255.   * string/array $sqlwhere 修改条件,允许为空,两种传值模式 
  256.   * 普通模式: 
  257.   * 'and type = 1 and username like "%os%"' 
  258.   * 数组模式: 
  259.   * array('type = 1', 'username like "%os%"') 
  260.   * int $debug 是否开启调试,开启则输出sql语句 
  261.   * 0 不开启 
  262.   * 1 开启 
  263.   * 2 开启并终止程序 
  264.   * int $mode 返回类型 
  265.   * 0 无返回信息 
  266.   * 1 返回执行条目数 
  267.   */ 
  268.   public function update($table$set$sqlwhere=""$debug=0, $mode=0){ 
  269.     //参数处理 
  270.     if(is_array($table)){ 
  271.       $table = implode(', '$table); 
  272.     } 
  273.     if(is_array($set)){ 
  274.       $s=''
  275.       foreach($set as $k=>$v){ 
  276.         $s.=$k."='".$v."',"
  277.       } 
  278.       $sarr=explode(',',$s);//去掉最后一个, 
  279.       array_pop($sarr); 
  280.       $set=implode(',',$sarr); 
  281.       //$set = implode(', ', $set); 
  282.     } 
  283.     if(is_array($sqlwhere)){ 
  284.       $sqlwhere = ' and '.implode(' and '$sqlwhere); 
  285.     } 
  286.     //数据库操作 
  287.     if($debug === 0){ 
  288.       if($mode === 1){ 
  289.         $this->exec("update $table set $set where 1=1 $sqlwhere"); 
  290.         $return = $this->res; 
  291.       }else
  292.         $this->query("update $table set $set where 1=1 $sqlwhere"); 
  293.         $return = true; 
  294.       } 
  295.       return $return
  296.     }else
  297.       echo "update $table set $set where 1=1 $sqlwhere"
  298.       if($debug === 2){ 
  299.         exit
  300.       } 
  301.     } 
  302.   } 
  303.   /** 
  304.   * 参数说明 
  305.   * string $table 数据库表 
  306.   * string/array $sqlwhere 删除条件,允许为空,两种传值模式 
  307.   * 普通模式: 
  308.   * 'and type = 1 and username like "%os%"' 
  309.   * 数组模式: 
  310.   * array('type = 1', 'username like "%os%"') 
  311.   * int $debug 是否开启调试,开启则输出sql语句 
  312.   * 0 不开启 
  313.   * 1 开启 
  314.   * 2 开启并终止程序 
  315.   * int $mode 返回类型 
  316.   * 0 无返回信息 
  317.   * 1 返回执行条目数 
  318.   */ 
  319.   public function delete($table$sqlwhere=""$debug=0, $mode=0){ 
  320.     //参数处理 
  321.     if(is_array($sqlwhere)){ 
  322.       $sqlwhere = ' and '.implode(' and '$sqlwhere); //是字符串需自己加上and 
  323.     } 
  324.     //数据库操作 
  325.     if($debug === 0){ 
  326.       if($mode === 1){ 
  327.         $this->exec("delete from $table where 1=1 $sqlwhere"); 
  328.         $return = $this->res; 
  329.       }else
  330.         $this->query("delete from $table where 1=1 $sqlwhere"); 
  331.         $return = NULL; 
  332.       } 
  333.       return $return
  334.     }else
  335.       echo "delete from $table where 1=1 $sqlwhere"
  336.       if($debug === 2){ 
  337.         exit
  338.       } 
  339.     } 
  340.   } 
  341. /* 
  342. sqlserver 配置 extension=php_pdo_mssql.dll和extension=php_pdo_sqlsrv.dll 安装对应的 ntwdblib.dll 
  343. http://msdn.microsoft.com/en-us/library/cc296170.aspx 下载php版本对应的sqlsrv扩展 
  344. sqlserver 配置 odbc连接需开启extension=php_pdo_odbc.dll 
  345. */ 
  346. $mssql2008_config=array
  347.   'dsn'=>'odbc:Driver={SQL Server};Server=192.168.1.60;Database=his',//数据库服务器地址 
  348.   'username'=>'sa'
  349.   'password'=>'xxxxx'
  350. ); 
  351. $mssql=new Pdodb($mssql2008_config); 
  352. $sql="select * from 
  353.   select row_number()over(order by tempcolumn)temprownumber,* 
  354.     from ( 
  355.       select top 10 tempcolumn=0,a.* 
  356.       from DA_GR_HBFS a 
  357.       where 1=1 
  358.     ) t 
  359. ) tt 
  360. where temprownumber>0"; 
  361. $mssql->query($sql); 
  362. while($res=$mssql->fetch()){ 
  363.   $data[]=$res
  364. print_r($data);exit
  365. //mysql 操作 
  366. $msyql_config=array
  367.   'dsn'=>'mysql:host=localhost;dbname=talk'
  368.   'username'=>'root'
  369.   'password'=>'123456' 
  370. ); 
  371. $mysql=new PDO_DB($msyql_config); 
  372. $sql = 'SELECT user_id, user_name, nickname FROM et_users '
  373. $mysql->query($sql); 
  374. $data=$mysql->fetchAll(); 
  375. print_r($data);exit
  376. //oracle 操作 
  377. $oci_config=array
  378.   'dsn'=>'oci:dbname=orcl'
  379.   'username'=>'BAOCRM'
  380.   'password'=>'BAOCRM' 
  381. ); 
  382. $oracle=new PDO_DB($oci_config); 
  383. //print_r($oracle);exit;//PDO_DB Object ( [pdo:protected] => PDO Object ( ) [res:protected] => [config:protected] => [Config] => Array ( [dsn] => oci:dbname=orcl [name] => PWACRM [password] => PWACRM ) ) 
  384. $sql="select * from CUSTOMER_LEVEL t"
  385. $oracle->query($sql); 
  386. $data=$oracle->fetchAll(); 
  387. print_r($data);exit
  388. /* 
  389. Array 
  390. ( 
  391.   [0] => Array 
  392.     ( 
  393.       [LEVEL_ID] => 1 
  394.       [0] => 1 
  395.       [LEVEL_NAME] => 普通会员 
  396.       [1] => 普通会员 
  397.       [LEVEL_DETAIL] => 普通会员 
  398.       [2] => 普通会员 
  399.       [SORT_NUMBER] => 15 
  400.       [3] => 15 
  401.       [CREATE_TIME] => 12-7月 -12 
  402.       [4] => 12-7月 -12 
  403.       [CREATE_BY] => 1 
  404.       [5] => 1 
  405.       [UPDATE_TIME] => 12-7月 -12 
  406.       [6] => 12-7月 -12 
  407.       [UPDATE_BY] => 1 
  408.       [7] => 1 
  409.       [STATE] => 正常 
  410.       [8] => 正常 
  411.     ) 
  412. )*/ 
  413. ?>

Tags: pdo mysql sqlserver oracle

分享到: