下面是在网上借鉴的一个PDO类:
1 host.';dbname='.$this->dbname; 19 //set options 20 $options = array( 21 PDO::ATTR_PERSISTENT => true, 22 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 23 ); 24 //create a new PDO instanace 25 try{ 26 $this->dbh = new PDO($dsn,$this->user,$this->pass,$options); 27 } 28 //catch any errors 29 catch(PDOException $e){ 30 $this->error = $e->getMessage(); 31 } 32 } 33 34 /* 35 function query 36 */ 37 public function query($query){ 38 $this->stmt = $this->dbh->prepare($query); 39 } 40 41 /* 42 fucntion bindValue 43 */ 44 public function bind($param,$value,$type){ 45 if (is_null($type)) { 46 switch (true) { 47 case is_int($value): 48 $type = PDO::PARAM_INT; 49 break; 50 case is_bool($value): 51 $type = PDO::PARAM_BOOL; 52 break; 53 case is_null($value): 54 $type = PDO::PARAM_NULL; 55 break; 56 default: 57 $type = PDO::PARAM_STR; 58 } 59 } 60 $this->stmt->bindValue($param, $value, $type); 61 } 62 63 /* 64 functin execute 65 */ 66 public function execute(){ 67 return $this->stmt->execute(); 68 } 69 /* 70 获得结果集 关联数组 71 */ 72 public function resultset(){ 73 $this->execute(); 74 return $this->stmt->fetchAll(PDO::FETCH_ASSOC); 75 } 76 77 78 /* 获得单条数据*/ 79 public function single(){ 80 $this->execute(); 81 return $this->stmt->fetch(PDO::FETCH_ASSOC); 82 } 83 84 public function rowCount(){ 85 return $this->stmt->rowCount(); 86 } 87 88 public function lastInsertId(){ 89 return $this->dbh->lastInsertId(); 90 } 91 92 public function beginTransaction(){ 93 return $this->dbh->beginTransaction(); 94 } 95 96 public function endTransaction(){ 97 return $this->dbh->commit(); 98 } 99 100 public function cancelTransaction(){101 return $this->dbh->rollBack();102 }103 104 public function debugDumpParams(){105 return $this->stmt->debugDumpParams();106 }107 108 }109 ?>
这个类的具体使用:
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/