下面是在网上借鉴的一个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类的更多相关文章

  1. PHP基于单例模式编写PDO类的方法

    一.单例模式简介 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 二.为什么要使用PHP单例模式? 1.php的应用主要在于数据库应用, 所以一个应用中会存在 ...

  2. php-验证码类-PDO类-缩略图类

    Verify.class.php 验证码类 <?php class Verify{ const VERIFY_TYPE_NUM=1; const VERIFY_TYPE_EN=2; const ...

  3. 封装好的PDO类

    封装PDO类,方便使用: <?php header('content-type:text/html;charset=utf-8'); /** * 封装PDODB类 */ // 加载接口 // i ...

  4. PHP用单例模式实现一个数据库类

    使用单例模式的出发点: 1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源. 2.如果系统中需要有一个类来全局控制某些 ...

  5. 使用代码向一个普通的类注入Spring的实例

    转载请在页首注明作者与原文地址 一:应用场景 什么是普通的类,就是没有@Controller,@Service,@Repository,@Component等注解修饰的类,同时xml文件中,也没有相应 ...

  6. 一个Java文件至多包含一个公共类

    编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...

  7. 一个java源文件中为什么只能有一个public类。

    我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...

  8. 很久以前写的一个 ShareRestrictedSD 类

    代码中一开始的 几个 USES 单元,可能是多余的. unit ShareRestrictedSD; interface uses Windows, Messages, SysUtils, Class ...

  9. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

随机推荐

  1. S2SH商用后台权限系统第二讲

    各位博友: 您好!我们今天接着上一讲继续学习S2SH商用后台权限系统,本讲我们重点设计下整个系统所需要的表结构. 用户表:记录用户信息. 角色表:标记用户归属的角色信息. 菜单表:或者叫模块表,记录整 ...

  2. linux编译安装LAMP

    Linux安装Apache+MySQL+PHP 安装部分依赖 安装apr(可选) # tar -xf apr-1.5.0.tar.bz2 # cd apr-1.5.0 #./configure --p ...

  3. Java 加密 MD5

    版权声明:本文为博主原创文章,未经博主允许不得转载. [md5] md5是一种哈希算法,哈希算法是啥? ... 特点是不能解密. [代码] package com.uikoo9.util.encryp ...

  4. cocos2dx jsb 在IOS与安卓下的一些不同之处

    cocos2dx版本 2.1.4 1:字体大小 cocosbuilder publish后应该注意IOS和安卓目录下的字体文件的规格是否齐全: 2:cc.LabelTTF 在ios下,cc.Label ...

  5. java11 Guava:谷歌开发的集合库

    Guava:谷歌开发的集合库,通过build path->Add External JARs 把guava.jar包加进去. 版本控制工具:.CVS .SVN .git 所以需要下载git客户端 ...

  6. C++ ORM ODB 入门介绍(二)

    目录[-] 1. ODB中的继承类型 2. abstract和polymorphic的区别 3.polymorphic表格 4.早期版本如何实现polymorphic 5.实例 本节主要介绍ODB中的 ...

  7. android 开发过程中碰到的 Failed to create the part's controls 问题

    在开发android的过程中,遇到一个很奇怪的问题,出现了“ Failed to create the part's controls” 的错误,查询了N多资料,然后逐条删除代码测试, 后来发现是变量 ...

  8. docker image export or import

    docker save <image-name> docker load <  <bak>.tar

  9. AWS RDS 使用笔记

    创建VPC安全组 添加VPC子网 创建RDS子网组 创建RDS参数组 创建MySQL实例 查看RDS终端节点 使用 MySQL 监视器与数据库实例上的数据库连接 安装mysql client $ su ...

  10. sublime Text 3 Package Control 安装代码

    ctrl+`,调出控制台,输入一下代码,回车,重启软件即可. import urllib.request,os; pf = 'Package Control.sublime-package'; ipp ...