留个脚印
<?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();
*/