封装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 ...
随机推荐
- <mvn:default-servlet-handler/>标签作用
servlet在找页面时,走的是dispatcherServlet路线.找不到的时候会报404 加上这个默认的servlet时候,servlet在找不到的时候会去找静态的内容.
- Java基础——Servlet(一)
在学习Servlet之前,需要首先学习一些关联性的知识. 一.动态网页程序 动态网页:它是网页中的偏功能性的部分也是最重要的部分.它不是我们平时所看见的页面特效,展示的效果.而是,一种交互行为.比如, ...
- 【JavaFx教程】第四部分:CSS 样式
第4部分主题 CSS样式表 添加应用程序图标 CSS样式表 在JavaFX中,你能使用层叠样式表修饰你的用户接口.这非常好!自定义Java应用界面从来不是件简单的事情. 在本教程中,我们将创建一个*D ...
- EF数据库优先模式(三)
今天2018年4月1日,呼叫王伟,81192,收到请返航! 接上次说,本节将LINQ以及lambda表达式 LINQ是C#里面针对SQL Server特有的数据访问操作方法,通俗一点说就是类似于写SQ ...
- 《Inside Solid State Device》读书笔记
这周我看了<Inside Solid State Device>一书,了解了解SSD作为软件的补充. 固态硬盘区别于将数据以磁形式存储的机械硬盘,使用了一种名为NAND的闪存颗粒,以电信号 ...
- 【奇技淫巧】绕过waf写文件
今天偶然利用此命令干成了大事,老司机一看就懂命令用法百度搜到的,希望对各位表哥有用echo 48 65 6C 6C 6F 2C 57 6F 72 6C 64 21 >hex.txt::生成 he ...
- CentOS 7环境下Pycharm安装流程记录
1.准备安装文件: 方法1: 使用内置火狐浏览器访问下载最新格式为tar.gz的压缩包 网址:https://www.jetbrains.com/pycharm/download/previous.h ...
- h5新增加的存储方法
h4中使用的cookie把用户信息保存在客户端浏览器,但是它受到很多限制. 大小:最多能存储4k 带宽:它是随着http请求一起发送到服务器的,因此浪费一部分的带宽. 复杂度:操作复杂. h5新增加了 ...
- JS--我发现,原来你是这样的JS(一)(初识,历史)
一.前言: 前段时间看红宝书(JavaScript高级程序设计),但没有计划的去看,也没有做详细的笔记,读了之后有点空虚,感觉不对劲啊,学的东西很难记住,印象不深啊,有种挫败感. 作前端的js都学不好 ...
- input radio单选框样式优化
HTML代码: <form> <div> <input id="item1" type="radio" name="it ...