封装PDO连接数据库代码
废话不说直接上代码:
<?php
class DB
{
protected static $_connect;
protected $dsn, $pdo;
protected $_data, $_count, $_lastInsertId; /**
* 构造函数
*
* @return DB
*/
private function __construct($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset, $dbms)
{
try {
$this->dsn = $dbms.':host='.$dbHost.';dbname='.$dbName;
$this->pdo = new PDO($this->dsn, $dbUser, $dbPasswd);
$this->pdo->exec('SET character_set_connection='.$dbCharset.', character_set_results='.$dbCharset.', character_set_client=binary');
} catch (PDOException $e) {
$this->outputError($e->getMessage());
}
} /**
* 获取返回结果、行数及最新插入数据的id
*
*/
public function data(){
return $this->_data;
}
public function count(){
return $this->_count;
}
public function lastInsertId(){
return $this->_lastInsertId;
} /**
* 防止克隆
*
*/
private function __clone() {} /**
* Singleton instance
*
* @return Object
*/
public static function connect($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset="utf8", $dbms="mysql")
{
if (self::$_connect === null) {
self::$_connect = new self($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset, $dbms);
}
return self::$_connect;
} /**
* Go 增删改查覆盖
*
* @param String $strSql SQL语句
* @param Array $arrayInputValue 替换占位符的值
* @return Object
*/
public function go($strSql, $arrayInputValue){
$handle=strtolower(preg_split("/\s+/",$strSql)[0]);//----获取sql语句第一个词(可能是select、update、delete、insert或replace)
if(strpos("/insert/delete/update/select/replace",$handle)>0){
$stmt = $this->pdo->prepare($strSql);
$stmt->execute($arrayInputValue);
$this->getPDOError();
$this->_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$this->_count=$stmt->rowCount();// ----如果是覆盖旧数据,rowCount不准确
$this->_lastInsertId=$this->pdo->lastInsertId();
return $this;
}else{
echo "<br>请检查sql语句是否有误!<br>";
}
} /**
* execSql
*
* @param String $strSql
* @return Int
*/
public function execSql($strSql)
{
$result = $this->pdo->exec($strSql);
$this->getPDOError();
return $result;
} /**
* 获取字段最大值
*
* @param string $table 表名
* @param string $field_name 字段名
* @param string $where 条件
*/
public function getMaxValue($table, $field_name, $where = '')
{
$strSql = "SELECT MAX(".$field_name.") AS MAX_VALUE FROM $table";
if ($where != '') $strSql .= " WHERE $where";
$stmt = $this->pdo->prepare($strSql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$maxValue = $data[0]["MAX_VALUE"];
if ($maxValue == "" || $maxValue == null) {
$maxValue = 0;
}
return $maxValue;
} /**
* 获取指定列的数量
*
* @param string $table
* @param string $field_name
* @param string $where
* @return int
*/
public function getCount($table, $field_name, $where = '')
{
$strSql = "SELECT COUNT($field_name) AS NUM FROM $table";
if ($where != '') $strSql .= " WHERE $where";
$stmt = $this->pdo->prepare($strSql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $data[0]["NUM"];
} /**
* 获取指定列的总和
*
* @param string $table
* @param string $field_name
* @param string $where
* @return int
*/
public function getSum($table, $field_name, $where = '')
{
$strSql = "SELECT SUM($field_name) AS SN FROM $table";
if ($where != '') $strSql .= " WHERE $where";
$stmt = $this->pdo->prepare($strSql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $data[0]["SN"];
} /**
* 预处理执行
*/
public function prepareSql($sql=''){
return $this->pdo->prepare($sql);
} /**
* 执行预处理
*/
public function execute($presql){
return $this->pdo->execute($presql);
} /**
* pdo属性设置
*/
public function setAttribute($p,$d){
$this->pdo->setAttribute($p,$d);
} /**
* beginTransaction 事务开始
*/
public function beginTransaction()
{
$this->pdo->beginTransaction();
} /**
* commit 事务提交
*/
public function commit()
{
$this->pdo->commit();
} /**
* rollback 事务回滚
*/
public function rollback()
{
$this->pdo->rollback();
} /**
* getPDOError 捕获PDO错误信息
*/
private function getPDOError()
{
if ($this->pdo->errorCode() != '00000') {
$arrayError = $this->pdo->errorInfo();
$this->outputError($arrayError[2]);
}
} /**
* 输出错误信息
*
* @param String $strErrMsg
*/
private function outputError($strErrMsg)
{
throw new Exception('MySQL Error: '.$strErrMsg);
} /**
* 关闭数据库连接
*/
public function close()
{
$this->pdo = null;
}
}
?>
如何使用:
<?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();//----关闭连接
?>
封装PDO连接数据库代码的更多相关文章
- 【转】php pdo连接数据库 解决中文乱码问题(wordpress mysql 问号?? ??)
原文链接:http://blog.csdn.net/ysydao/article/details/11002295 PHP 用pdo连接数据库时出现中文乱码问题解决办法 1.array(PDO::MY ...
- 封装PDO函数
funPDO.php <?php /** * @title: 封装PDO函数 * * @Features: * 1. 封装 SELECT ,INSERT,DELETE,UPDATE 操作 @do ...
- PDO连接数据库
PDO连接数据库 PDO简介和配置 php.ini extension=php_pdo.dll extension=php_pdo_myysql.dll PDO连接MYSQL new PDO(&quo ...
- 使用PDO连接数据库 查询和插入乱码的解决方法
问题:PDO连接数据库后,查询和插入中文到数据库,出现乱码,如图: 解决方法: 法1: try{ $opts_values = array(PDO::MYSQL_ATTR_INIT_COMMAND=& ...
- AngularJS之使用服务封装可复用代码
创建服务组件 在AngularJS中创建一个服务组件很简单,只需要定义一个具有$get方法的构造函数, 然后使用模块的provider方法进行登记: //定义构造函数 var myServicePro ...
- 对百度WebUploader的二次封装,精简前端代码之图片预览上传(两句代码搞定上传)
前言 本篇文章上一篇: 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传) 此篇是在上面的基础上扩展出来专门上传图片的控件封装. 首先我们看看效果: 正文 使用方式同 ...
- 玩转UITableView系列(一)--- 解耦封装、简化代码、适者生存!
UITableView这个iOS开发中永远绕不开的UIView,那么就不可避免的要在多个页面多种场景下反复摩擦UITableView,就算是刚跳进火坑不久的iOS Developer也知道实现UITa ...
- volley+okhttp封装,一行代码就可访问网络
volley+okhttp封装,一行代码就可访问网络 前言: 我写这个可能不会完全的教会你去怎么封装一个网络框架,我的目的在于让你不需要你自己封装就可以访问网络,或者说互相学习也可以,我只是想让你大概 ...
- 完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络]
完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络] 地址:http://blog.csdn.net/qq_35101189/article/details/53729720?ref=m ...
随机推荐
- Oracle TO_DATE() 函数格式化时间【全】
TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显 ...
- 数据结构与算法--最小生成树之Kruskal算法
数据结构与算法--最小生成树之Kruskal算法 上一节介绍了Prim算法,接着来看Kruskal算法. 我们知道Prim算法是从某个顶点开始,从现有树周围的所有邻边中选出权值最小的那条加入到MST中 ...
- wagon-maven-plugin实现自动打包部署到服务器
1.在maven中添加依赖 <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/wagon-maven-plugin --> ...
- forever 启动nodejs
forever可以看做是一个nodejs的守护进程,能够启动,停止,重启我们的app应用. 1.全局安装 forever // 记得加-g,forever要求安装到全局环境下 sudo npm ins ...
- 洛谷P4396 [AHOI2013]作业(树套树)
题意 题目链接 Sol 为什么一堆分块呀..三维数点不应该是套路离线/可持久化+树套树么.. 亲测树状数组套权值线段树可过 复杂度\(O(nlog^2n)\),空间\(O(nlogn)\)(离线) # ...
- 分布式配置中心 携程(apollo)
1.传统配置文件与分布式配置文件区别 传统配置文件:如果修改了配置文件,需要重新打包发布,重新发布服务,而且每个环境的变更配置文件,比较繁琐. 分布式配置文件:将配置文件注册到配置中心上去,可以使用分 ...
- Postman Postman测试接口之POST提交本地文件数据
Postman测试接口之POST提交本地文件数据 by:授客 QQ:1033553122 本文主要是针对用Postman POST提交本地文件数据的方法做个简单介绍 举例: 文件同步接口 接口地址 ...
- ngnix https
server { listen 80;#端口号 server_name www.xxxx.net;#本机 charset ...
- Python Django框架笔记(四):数据分页和CSRF跨站点请求伪造
(一)数据分页 可以参考 https://docs.djangoproject.com/en/2.0/topics/pagination/ 模板:如果只要显示 1.2.3.4.5.6....的话, ...
- keystone令牌三种生成方式
keystone认证方式:UUID.PKI.Fernet; 知识点复习: 通俗的讲,token 是用户的一种凭证,需拿正确的用户名/密码向 Keystone 申请才能得到.如果用户每次都采用用户名/密 ...