一个PDO类
下面是在网上借鉴的一个PDO类:
<?php
class Database{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME; private $dbh;
private $error; private $stmt; /*
function __construct
*/
public function __construct(){
// set DSN
$dsn = 'mysql:host='.$this->host.';dbname='.$this->dbname;
//set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
//create a new PDO instanace
try{
$this->dbh = new PDO($dsn,$this->user,$this->pass,$options);
}
//catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
}
} /*
function query
*/
public function query($query){
$this->stmt = $this->dbh->prepare($query);
} /*
fucntion bindValue
*/
public function bind($param,$value,$type){
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
} /*
functin execute
*/
public function execute(){
return $this->stmt->execute();
}
/*
获得结果集 关联数组
*/
public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
} /* 获得单条数据*/
public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
} public function rowCount(){
return $this->stmt->rowCount();
} public function lastInsertId(){
return $this->dbh->lastInsertId();
} public function beginTransaction(){
return $this->dbh->beginTransaction();
} public function endTransaction(){
return $this->dbh->commit();
} public function cancelTransaction(){
return $this->dbh->rollBack();
} public function debugDumpParams(){
return $this->stmt->debugDumpParams();
} }
?>
这个类的具体使用:
try{
$database = new Database();
$database->beginTransaction();
$tm_startt = strtotime($_POST['time_start']);
$tm_end = strtotime($_POST['time_end']);
$database->query('insert into gua_user(user_name, user_nicheng, user_type, user_comment,user_created,user_end) values (:user_name, :user_nicheng, :user_type, :user_comment,:user_created,:user_end)');
$database->bind(':user_name', $_POST['username']);
$database->bind(':user_nicheng', $_POST['user_nick']);
$database->bind(':user_type', $_POST['user_type']);
$database->bind(':user_comment', $_POST['comment']);
$database->bind(':user_created', $tm_startt);
$database->bind(':user_end', $tm_end);
$database->execute();
//获得影响的行数
$rows = $database->rowCount();
//获得本条数据的id
$id = $database->lastInsertId();
if($rows<1){
throw new PDOexception('第一句sql语句执行失败!', '01');
}
//产生随机字符串 salt
$salt = $database->salt();
$password = md5($_POST['password'].$salt);
$database->query('insert into gua_salt(uid,salt,password) values (:uid,:salt,:password)');
$database->bind(':uid',$id);
$database->bind(':salt',$salt);
$database->bind(':password',$password);
$database->execute();
$rows = $database->rowCount();
if($rows<1){
throw new PDOexception('第二句sql语句执行失败!', '02');
}
$database->endTransaction();
}catch(PDOexception $e){
//如果有异常被抛出 则事务失败 执行事务回滚
$database->cancelTransaction();
//输出异常信息
echo $e->getCode().'-----'.$e->getMessage();
}
使用事物,注意表的类型要是innodb的。
参考网站:http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/
一个PDO类的更多相关文章
- PHP基于单例模式编写PDO类的方法
一.单例模式简介 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 二.为什么要使用PHP单例模式? 1.php的应用主要在于数据库应用, 所以一个应用中会存在 ...
- php-验证码类-PDO类-缩略图类
Verify.class.php 验证码类 <?php class Verify{ const VERIFY_TYPE_NUM=1; const VERIFY_TYPE_EN=2; const ...
- 封装好的PDO类
封装PDO类,方便使用: <?php header('content-type:text/html;charset=utf-8'); /** * 封装PDODB类 */ // 加载接口 // i ...
- PHP用单例模式实现一个数据库类
使用单例模式的出发点: 1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源. 2.如果系统中需要有一个类来全局控制某些 ...
- 使用代码向一个普通的类注入Spring的实例
转载请在页首注明作者与原文地址 一:应用场景 什么是普通的类,就是没有@Controller,@Service,@Repository,@Component等注解修饰的类,同时xml文件中,也没有相应 ...
- 一个Java文件至多包含一个公共类
编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...
- 一个java源文件中为什么只能有一个public类。
我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...
- 很久以前写的一个 ShareRestrictedSD 类
代码中一开始的 几个 USES 单元,可能是多余的. unit ShareRestrictedSD; interface uses Windows, Messages, SysUtils, Class ...
- 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...
随机推荐
- JIRA 6.0.1 (ZIP Archive)最新破解方法,绝对可用
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- spring websocket Converters must not be empty
此文件 WebSocketConfig.java public class WebSocketConfig implements WebSocketMessageBrokerConfigurer ...
- jQuery获取Select选中的Text和Value,根据Value值动态添加属性
语法解释:1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发2. var chec ...
- 关于模拟器不能运行项目问题:Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
我有一个习惯,当做完某一项功能时就想试试运行效果.所以一个程序完成前会运行无数遍.但是有时会出现不能运行的问题,并且这个问题不是来自项目的错误,显示器显示如下错误: [2013-08-31 08:45 ...
- 深入理解Linux操作系统守护进程的意义
Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的.守护进程 ...
- 设置background属性使用selector的时候内置?attr报错的解决方案
当我们设置background属性的时候可以设置background="@color/black" 也可以设置 background="@drawable/selecto ...
- Nginx高性能服务器安装、配置、运维 (2) —— Nginx安装
三.Nginx 安装 使用SecureCRT以Root身份登录阿里云,在安装Nginx前先做好阿里云磁盘挂载 -------------- 挂载磁盘 -------------- 1.df -h #显 ...
- JQuery设置缓慢下拉大行多次执行的解决办法,以及stop()函数的简单理解
$(function(){ $('.all>li').mouseover(function(e) { $(this).children().stop().slideDown(300 ...
- 理解C#中的“静态”
一.静态成员 1.通过static关键字修饰,是属于类,实例成员属于对象,在这个类第一次加载的时候,这个类下面的所有静态成员会被加载. 2.静态成员只被创建一次,所以静态成员只有一份,实例成员有多少个 ...
- 20160127 linux 学习笔记
Linux学习笔记第一天 Linux基本介绍 Linux的起源和发展: 简单说linux是一种操作系统,可以安装在包括服务器.个人电脑,乃至PDA.手机.打印机等各类设备中. 起源: Linux起源于 ...