封装PDO连接数据库代码

废话不说直接上代码:

  1 <?php
  2 class DB
  3 {
  4     protected static $_connect;
  5     protected $dsn, $pdo;
  6     protected $_data, $_count, $_lastInsertId;
  7
  8     /**
  9      * 构造函数
 10      *
 11      * @return DB
 12      */
 13     private function __construct($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset, $dbms)
 14     {
 15         try {
 16             $this->dsn = $dbms.‘:host=‘.$dbHost.‘;dbname=‘.$dbName;
 17             $this->pdo = new PDO($this->dsn, $dbUser, $dbPasswd);
 18             $this->pdo->exec(‘SET character_set_connection=‘.$dbCharset.‘, character_set_results=‘.$dbCharset.‘, character_set_client=binary‘);
 19         } catch (PDOException $e) {
 20             $this->outputError($e->getMessage());
 21         }
 22     }
 23
 24     /**
 25      * 获取返回结果、行数及最新插入数据的id
 26      *
 27      */
 28     public function data(){
 29         return $this->_data;
 30     }
 31     public function count(){
 32         return $this->_count;
 33     }
 34     public function lastInsertId(){
 35         return $this->_lastInsertId;
 36     }
 37
 38     /**
 39      * 防止克隆
 40      *
 41      */
 42     private function __clone() {}
 43
 44     /**
 45      * Singleton instance
 46      *
 47      * @return Object
 48      */
 49     public static function connect($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset="utf8", $dbms="mysql")
 50     {
 51         if (self::$_connect === null) {
 52             self::$_connect = new self($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset, $dbms);
 53         }
 54         return self::$_connect;
 55     }
 56
 57
 58     /**
 59      * Go 增删改查覆盖
 60      *
 61      * @param String $strSql SQL语句
 62      * @param Array $arrayInputValue 替换占位符的值
 63      * @return Object
 64      */
 65     public function go($strSql, $arrayInputValue){
 66         $handle=strtolower(preg_split("/\s+/",$strSql)[0]);//----获取sql语句第一个词(可能是select、update、delete、insert或replace)
 67         if(strpos("/insert/delete/update/select/replace",$handle)>0){
 68             $stmt = $this->pdo->prepare($strSql);
 69             $stmt->execute($arrayInputValue);
 70             $this->getPDOError();
 71             $this->_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
 72             $this->_count=$stmt->rowCount();// ----如果是覆盖旧数据,rowCount不准确
 73             $this->_lastInsertId=$this->pdo->lastInsertId();
 74             return $this;
 75         }else{
 76             echo "<br>请检查sql语句是否有误!<br>";
 77         }
 78     }
 79
 80     /**
 81      * execSql
 82      *
 83      * @param String $strSql
 84      * @return Int
 85      */
 86     public function execSql($strSql)
 87     {
 88         $result = $this->pdo->exec($strSql);
 89         $this->getPDOError();
 90         return $result;
 91     }
 92
 93     /**
 94      * 获取字段最大值
 95      *
 96      * @param string $table 表名
 97      * @param string $field_name 字段名
 98      * @param string $where 条件
 99      */
100     public function getMaxValue($table, $field_name, $where = ‘‘)
101     {
102         $strSql = "SELECT MAX(".$field_name.") AS MAX_VALUE FROM $table";
103         if ($where != ‘‘) $strSql .= " WHERE $where";
104         $stmt = $this->pdo->prepare($strSql);
105         $stmt->execute();
106         $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
107         $maxValue = $data[0]["MAX_VALUE"];
108         if ($maxValue == "" || $maxValue == null) {
109             $maxValue = 0;
110         }
111         return $maxValue;
112     }
113
114     /**
115      * 获取指定列的数量
116      *
117      * @param string $table
118      * @param string $field_name
119      * @param string $where
120      * @return int
121      */
122     public function getCount($table, $field_name, $where = ‘‘)
123     {
124         $strSql = "SELECT COUNT($field_name) AS NUM FROM $table";
125         if ($where != ‘‘) $strSql .= " WHERE $where";
126         $stmt = $this->pdo->prepare($strSql);
127         $stmt->execute();
128         $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
129         return $data[0]["NUM"];
130     }
131
132     /**
133      * 获取指定列的总和
134      *
135      * @param string $table
136      * @param string $field_name
137      * @param string $where
138      * @return int
139      */
140     public function getSum($table, $field_name, $where = ‘‘)
141     {
142         $strSql = "SELECT SUM($field_name) AS SN FROM $table";
143         if ($where != ‘‘) $strSql .= " WHERE $where";
144         $stmt = $this->pdo->prepare($strSql);
145         $stmt->execute();
146         $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
147         return $data[0]["SN"];
148     }
149
150     /**
151    * 预处理执行
152    */
153     public function prepareSql($sql=‘‘){
154         return $this->pdo->prepare($sql);
155   }
156
157     /**
158    * 执行预处理
159    */
160     public function execute($presql){
161         return $this->pdo->execute($presql);
162     }
163
164     /**
165      * pdo属性设置
166      */
167     public function setAttribute($p,$d){
168         $this->pdo->setAttribute($p,$d);
169     }
170
171     /**
172      * beginTransaction 事务开始
173      */
174     public function beginTransaction()
175     {
176         $this->pdo->beginTransaction();
177     }
178
179     /**
180      * commit 事务提交
181      */
182     public function commit()
183     {
184         $this->pdo->commit();
185     }
186
187     /**
188      * rollback 事务回滚
189      */
190     public function rollback()
191     {
192         $this->pdo->rollback();
193     }
194
195     /**
196      * getPDOError 捕获PDO错误信息
197      */
198     private function getPDOError()
199     {
200         if ($this->pdo->errorCode() != ‘00000‘) {
201             $arrayError = $this->pdo->errorInfo();
202             $this->outputError($arrayError[2]);
203         }
204     }
205
206     /**
207      * 输出错误信息
208      *
209      * @param String $strErrMsg
210      */
211     private function outputError($strErrMsg)
212     {
213         throw new Exception(‘MySQL Error: ‘.$strErrMsg);
214     }
215
216     /**
217      * 关闭数据库连接
218      */
219     public function close()
220     {
221         $this->pdo = null;
222     }
223 }
224 ?>

如何使用:

<?php
require "db.class.php";//----引入文件
$pdo=DB::connect("localhost","root","[密码]","[数据库名]");//--创建PDO并连接数据库
$sql="……";//----注:这里sql语句占位符必须用“?”表示
$pdo->go($sql, array("[value1]","[value2]",...));//---执行sql语句(所有sql语句均可用go函数执行)

var_dump($pdo->result());//----打印结果集(如果是select语句返回的是代表结果集的数组,如果是其他语句返回的是空数组)
echo $pdo->count();//-----如果是select打印的是结果集包含的数据数量,如果是delete或update打印的是删除或更改的数据数量
echo $pdo->lastInsertId();//------如果是insert语句,$pdo->lastInsertId()表示最新插入数据的id

$pdo->close();//----关闭连接
?>

原文地址:https://www.cnblogs.com/programs/p/9500736.html

时间: 2024-10-10 16:21:54

封装PDO连接数据库代码的相关文章

【转】php pdo连接数据库 解决中文乱码问题(wordpress mysql 问号?? ??)

原文链接:http://blog.csdn.net/ysydao/article/details/11002295 PHP 用pdo连接数据库时出现中文乱码问题解决办法 1.array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"),在与数据库建立连接的时候的第四个参数   example:        $dbh = new PDO($dsn,$user,$pass,array(PDO::MYSQL_ATTR_INIT_COM

完整java开发中JDBC连接数据库代码和步骤

完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(Class

20150113--PDO增删改查+封装PDO类

回顾 方法重写:是因为对象的访问会先去子类的类空间找,从而形成了对父类的覆盖. 继承链:类只能单继承,但是可以通过继承链来实现多继承 特殊类:final类和抽象类 接口:interface PHP重载:当访问一个权限不够或者不存在的属性或者方法的时候,会自动触发的魔术方法. 属性重载和方法重载 对象的保存和还原:serialize和unserialize(对应的类已经在内存:如果有资源属性必须进行重新加载资源),魔术方法(__sleep和__wakeup) 对象遍历:默认只能遍历public属性

UDP(socket)接和数据案例封装成C++代码

 配置QT下的pro文件 TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt   LIBS += -lWs2_32   ##标示使用window下的Ws2_32.lib,-l表示要链接后面的库 #-lWs2_32,link Ws2_32.lib   SOURCES += main.cpp \     udp.cpp   HEADERS += \     udp.h 编写udp.h文件 #ifndef UDP_H

MySQL_PHP学习笔记_2015_0907_PHP用pdo连接数据库时报错 could not find driver

环境: Windows, zend studio 错误信息: could not find driver   第一想到的办法还是百度--   下面是解决办法: 由于PHP默认的设置中, php_pdo_mysql模块是关闭的, 所以才会报could not find driver的错误; 把这个模块打开, 重启apache. 摘自互联网:pdo 连接数据库 报错 could not find driver 解决方法

PHP5中使用PDO连接数据库

PDO  如何连接 new PDO("mysql:host=localhost;dbname=php100","root", “ "); 默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数: array(PDO::ATTR_PERSISTENT => true) 变成这样: new PDO(“连接信息”, 'root', '', array(PDO::ATTR_PERSISTENT => true)); PDO 常用方法及其使用 PD

JDBC 连接数据库代码及步骤

完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库 ?创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(Class

匿名对象,封装,构造代码块、静态代码块、内部类、匿名内部类

匿名对象:没有引用类型变量指向的对象就称为匿名对象. 匿名对象的主要作用:简化书写 匿名对象主要用于两种应用场景: 1.如果一个对象的方法只会调用一次的时候,然后该对象就不再使用了,这时候就可以使用匿名对象 2.作为参数传递 封装的步骤: 1.私有化要封装的属性 2.根据需求提供对应的get或set方法 封装的好处: 1.提高了数据的安全性 2.操作简单 3.隐藏了实现 封装一定会用上的场景:如果是实体类的属性,在开发过程中,全部都会封装起来 构造代码块:创建一个对象的时候,给对象进行统一的初始

规范和封装jdbc程序代码

JDBC 部分方法引用工具类 1 package it.cast.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class jdbcUtils { 10 11 private static String