封装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 ...
随机推荐
- [日常] C语言中的字符数组和字符串
c语言字符数组和字符串:1.存放字符的数组称为字符数组 char str[]2.'\0'也被称为字符串结束标志3.由" "包围的字符串会自动在末尾添加'\0'4.逐个字符地给数组赋 ...
- Moon Game (凸四边形个数,数学题)
Problem 2148 Moon Game Accept: 24 Submit: 61 Time Limit: 1000 mSec Memory Limit : 32768 KB Pro ...
- Windows中的键盘快捷方式大全
Windows有很多键盘快捷方式,使用键盘快捷方式能够大大提高使用windows的效率,同时还能提升自己的逼格,背熟几个快捷方式,操作起来行云流水犹如大神一般! 页面较长,请使用目录浏览(点击跳转), ...
- 设计模式-原型(prototype)
一.概念 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 二.模式动机 当已有一个对像,暂且称之为原型对象,需要一个新的对像,该对像和已有的原型对像具有相同的类型,且里面的属性大部分 ...
- Android - Navigation Drawer
http://www.jianshu.com/p/c8cbeb7ea43a 用Navigation Drawer 和 Navigation View 来实现左右侧滑 Activity里甚至什么都不用写 ...
- Java - 线程让步和休眠
Java多线程系列--“基础篇”06之 线程让步 概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield ...
- RocketMQ 消息存储
消息存储 主要的存储文件: 1.消息文件(commitLog) 2.消息消费队列文件(consumeQueue) 3.Hash索引文件(IndexFile) 4.检测点文件(checkpoint) 5 ...
- AngularJS学习之 ui router
1.安装 bower install --save angular_ui-router 2.在项目主页面 index.html中添加 <div ui-view="">& ...
- 华Xia相机WEB后台设置
1:设备维护->设备信息:出入口类型:入口2:更多参数->屏显参数:屏显协议18 3:更多参数->外设参数:RS581-1 串口使能勾上 串口工作模式 屏显控制 96004:更多参数 ...
- 绝版Node--Sequlize搭建服务(Node全栈之路 二)
在Node全栈之路(一),也就是上篇文章中,我们讲到了sequlize的基本增删该查,这篇文章,我们在上篇文章的基础上继续探讨,讲一下关于sequlize创建的表之间的对应关系 参考资料:https: ...