留个脚印
<?php class pdodb{ //public protected private //本类,不执行SQL命令是不会建立连接的. //并且执行后有关闭连接清空结果的操作. private $pdodb;//连接 private $res;//远程结果对象 public $arr;//本地结果数组 private $cs=array(//连接数组 'host' =>'127.0.0.1', 'port' =>'3306', 'username' =>'root', 'password' =>'', 'dbname' =>'mysql', 'charset' =>'utf8', ); //********************************* //***************单例化************ //********************************* //三私一公 private function __construct(){}//令new()新对象失效 private function __clone(){}//令克隆对象失效. private static $db;//单例对像属性 public static function getdb($arr=null)//单例对象入口 { if(!isset(self::$db)) { self::$db=new self(); if($arr){ if(isset($arr['host']))self::$db->cs['host']=$arr['host']; if(isset($arr['port']))self::$db->cs['port']=$arr['port']; if(isset($arr['username']))self::$db->cs['username']=$arr['username']; if(isset($arr['password']))self::$db->cs['password']=$arr['password']; if(isset($arr['dbname']))self::$db->cs['dbname']=$arr['dbname']; if(isset($arr['charset']))self::$db->cs['charset']=$arr['charset']; } } return self::$db; } //连接 private function connect(){ // //连接信息 $dsn="mysql:host=".$this->cs['host'].//主机 ";port=".$this->cs['port'].//端口 ";dbname=".$this->cs['dbname'];//数据库名 //登录名和密码 $username=$this->cs['username']; $password=$this->cs['password']; //连接操作 try{ $this->pdodb = new PDO($dsn,$username,$password); }catch (PDOException $e) { echo "<br>Connection failed error:new PDO()---PDO:58 "; echo "<br>". $e->getMessage() ; die("<br>STOP!!!"); } return $this->pdodb; } //设置字符集 private function charset($char='utf8'){ $this->pdodb->query("set names ".$char); } //USE数据库 private function usedb($dbname='mysql'){ $this->pdodb->query("use ".$dbname); } //数据库准备 private function ready(){ $this->charset($this->cs['charset']); $this->usedb($this->cs['dbname']); } //执行SQL命令 //$sql---命令:string //$erro----报错开关:任意不是NULL的值0123.... private function query($sql,$erro=null){ $this->connect(); $this->ready(); $this->res = $this->pdodb->query($sql); if($erro!==null){ if(!$this->res){ $error=$this->pdodb->errorInfo(); echo "<br>****************************"; echo "<br>执行失败"; echo "<br>命令:".$sql; echo "<br>客户代码:".$error[0]; echo "<br>错误代码:".$error[1]; echo "<br>错误信息:".$error[2]; echo "<br>****************************"; die("<br>STOP!!!"); } } return $this->res; } //公开的有返回的命令执行 //返回结果保存在$this-arr //结果类型 array true/false 三种 //参数: //$sql---MYSQL命令 //$index---返回数据的下标类型,默认为字段下标 // 类型: 'n'---数值下标 // 'a'---字段下标 // 'b'---数值/字段(两种)双下标 public function queryarr($sql=null,$index='a'){ if($sql==null){return $this->arr=false;} //$r=$this->query($sql,0);//加第二个参数打开报错 $this->query($sql); //结果对象只有三种情况 //1.正确执行,但没有返回结果集.---布尔值:true //2.执行失败---布尔值:false //3.正确执行,有返回结果,返回一个对象----对象:object //可以从对象中取出结果存入本地的数组 //注意一种情况,就是返回空数组.array{} if($this->res===true){ $this->arr=true; }else{ if($this->res===false){ $this->arr=false; }else{ //取得全部数据 三类下标 switch ($index) { case 'a': $this->arr=$this->res->fetchAll(PDO::FETCH_ASSOC);//字段下标 break; case 'n': $this->arr=$this->res->fetchAll(PDO::FETCH_NUM);//数值下标 break; case 'b': $this->arr=$this->res->fetchAll();//双下标 break; } $this->res->closeCursor();//释放结果对象 } } //$this->pdodb->close();//关闭连接对象 $this->pdodb=null;//复位 PDO关闭连接对象的办法 $this->res=null;//复位 释放结果后,对象还是存在的.所以要复位 return $this->arr; } //********************** //纯输出数据到表格table public function tab($arr) { if($arr===true)$arr=array(array("true")); if($arr===false)$arr=array(array("false")); if($arr===null)$arr=array(array("null")); echo "<table border='1'>"; foreach($arr as $k1=>$v1) { //********************** //表头 if($k1==0) { echo "<tr>"; foreach($v1 as $k2=>$v2) { echo "<th>"; echo $k2; echo "</th>"; } echo "</tr>"; } //********************** //内容 echo "<tr>"; foreach($v1 as $k2=>$v2) { echo "<td>"; echo $v2; echo "</td>"; } echo "</tr>"; } echo "</table>"; } //SQL字符转义(防止SQL注入)----此处好像有些多余,但并不是. public function quote($str){ $this->connect(); $s=$this->pdodb->quote($str); $this->pdodb=null;//断开数据库服务器的连接 return $s; } public function getall($sql=null,$index='a'){ $a=$this->queryarr($sql,$index); return $a; } public function getrow($sql=null,$index='a'){ $a=$this->queryarr($sql,$index); return $a; } public function getone($sql=null,$index='n'){ $a=$this->queryarr($sql,$index); if($a===true)return $a; if($a===false)return $a; if($a==null)return null; return $a[0][0]; } //测试 public function test(){ /* $a=123; $b=$this->quote($a); echo "<br>asdg asdf $b"; */ //$sql="select session_content from session where session_id='$sess_id'"; //增 //$sql="replace into session values('abcd','cccc',unix_timestamp())"; //$sql="replace into session values('aaaa','cccc',unix_timestamp())"; //$sql="insert into session values('abcd11','cccc1',unix_timestamp())"; //$sql="select * from session where session_id='abcd'"; //$sql="select * from session where session_id='abcd222'"; //$sql="set a=1"; $sql="select * from session "; //$sql="select * from session where session_id='777'"; //$sql="select * from session"; //$sql=null; //$this->query($sql,0); $this->queryarr($sql); //$a=$this->res->fetchAll(PDO::FETCH_ASSOC);//字段下标 //$this->connect(); //echo "<pre>"; //var_dump($this->pdodb); //var_dump($this->res); //var_dump($this->arr); //var_dump($a); //echo "</pre>"; $this->tab($this->arr); } } /* $cs=array(//连接数组 'host' =>'127.0.0.1', 'port' =>'3306', 'username' =>'ddv1999', 'password' =>'1234abcd', 'dbname' =>'ddv1999', 'charset' =>'utf8', ); $op1=pdodb::getdb($cs); //echo "<pre>"; //var_dump($op1); //echo "</pre>"; $op1->test(); */