一个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 ...
随机推荐
- JS中比較2个字符串内元素的不同(字符1, 字符2, 分隔符可选)
比較2个字符串内元素的不同(字符1, 字符2, 分隔符可选) 文件: diff.js // 演示样例使用方法 /* var str1 = "tie, mao, 55"; var s ...
- css 行内元素和块级元素
1. 块级元素默认在新行开始,如常见的div和p标签,行内元素默认在同行开始显示,如a,span标签 2.块级元素一般用于做容器,可容纳行内和块级元素,可设置width和height,行内元素只能容纳 ...
- java23 XML
XML:可扩展标记语言. xml可以当成一个小型的数据库, html / \ html5 xhtml(格式比较严格) | xml xml解析方式有2种: -SAX,SAX是基于事件流的解析,事件流解析 ...
- iostat来对linux硬盘IO性能进行了解
http://www.php-oa.com/2009/02/03/iostat.html
- FAQ系列 | 解读EXPLAIN执行计划中的key_len
http://imysql.com/2015/10/20/mysql-faq-key-len-in-explain.shtml
- Dynamic SQL--官方文档
https://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html 3.9. Dynamic SQL A very common problem ...
- linux服务器上
命令行>mysql -uwin -pwin2009进入mysql command状态>use mindo时入mindo数据库>source 500sql.txt执行sql
- LaTeX 标题中使用 \bm 命令与 hyperref 的冲突
问题 当使用 hyperref 宏包时,在标题中使用 \bm 为数学符号加粗会出现错误 \documentclass{article} \usepackage{bm} \usepackage{hype ...
- C++学习(四)
一.拷贝构造函数和拷贝赋值运算符1.拷贝构造:用一个已有的对象,构造和它同类型的副本对象——克隆.2.形如class X { X (const X& that) { ... }};的构造函数 ...
- UML 结构图之包图 总结
[注] 本文不是包图的基础教程, 只是包图的图形总结. 学习UML图形 推荐阅读<UML参考手册>第2版. http://www.umlchina.com/ 推荐微软的开发软件设计模型 h ...