PHP数据库连接类

<?php
/*************************************************************
数据库连接类
*************************************************************/
class Db{
    static private $_instance=null;
    static private $conn=null;
    private $table;
    private $where;
    private $data;
    private $field="*";
    private $arrk=array();
    private $arrv=array();
    function __construct(){
        $username=config("database.username");
        $password=config("database.password");
        $servername=config("database.servername");
        $dbname=config("database.dbname");
        $dns="mysql:host=".$servername.";dbname=".$dbname;
        self::$conn=new PDO($dns,$username,$password);
        self::$conn->exec("set names utf8");

    }

    /*
    获取实例
    */
    static function get_instance(){
        if (self::$_instance==null) {
            # code...
            self::$_instance=new self;
        }
        return self::$_instance;
    }
    /*
    获取数据库连接
    */
    static function get_conn(){
        if (self::$conn==null) {
            new self;
        }
        return self::$conn; 
    }

    function setTable($table=''){
        //表
        $this->table=$table;
        return self::$_instance;
    }
    function data($data){
        //数据
        //$data=array('account'=>'15','password'=>'15','username'=>"十五");
        // (account,password,username) values('1','1','1'),('2','2','2') ";
        $i=1;
        foreach ($data as $key => $value) {
            # code...
            $v[$i]="?";
            $arrk[$i]=$key;
            $arrv[$i]=$value;
            $i++;
        }
        $this->arrv=$arrv;
        $v1="(".implode(",", $v).")";
        $this->data="(".implode(",", $arrk).")"." values ".$v1;
        return self::$_instance;
    }
    function field($field=array()){
        //字段
        if ($field==null) {
            # code...
            $this->field="*";
        }else{
            $this->field=implode(",",$field);
        }
        return self::$_instance;
    }
    function where($where=array()){
        //条件
        // $where=array("account"=>1,'username'=>"杨");
        if ($where==null) {
            # code...
            $this->where='';
        }
        else{
            $i=1;
            foreach ($where as $key => $value) {
                $arrk[$i]=$key."=?";
                $arrv[$i]=$value;
                $i++;
            }
            $this->arrv=$arrv;
            $this->where=" where ".implode(" and ",$arrk);
        }

        return self::$_instance;
    }

    /*
    查:不允许无条件查询
    */
    function select($field=array(),$where=array()){
        if (func_num_args()) {      //获取参数个数,使用这种方法,至少传递一个参数,可以是array()
            $this->field($field);
            $this->where($where);
        }
        $sql="select ".$this->field." from ".$this->table.$this->where;
        echo $sql;
        exit();
        $stmt=$this->bind($sql);
        $res=$stmt->fetchAll(PDO::FETCH_ASSOC); 
        return $res;
    }
    /*
    增:暂时实现插入一条数据
    */
    function insert($data=array()){
        if (func_num_args()) {      //获取参数个数,用来区分不用的调用方式
            $this->data($data);
        }
        //$sql="insert into users (account,password,username) values('1','1','1'),('2','2','2') ";
        $sql="insert into ".$this->table.$this->data;
        $stmt=$this->bind($sql);
        return $stmt->rowCount();      //返回影响条数
    }
    /*
    删
    */
    function delete($where=array()){
        if (func_num_args()) {      //获取参数个数,用来区分不用的调用方式
            $this->where($where);
        }
        //$sql="delete from users where id=1";
        $sql="delete from ".$this->table.$this->where;
        $stmt=$this->bind($sql);
        return $stmt->rowCount();
    }
    /*
    改:没有完全使用参数绑定
    */
    function update($data,$where){
        if (func_num_args()) {      //获取参数个数,用来区分不用的调用方式
            $this->where($where);
        }
        //update person set number=null,name=null where;
        $i=1;
        foreach ($data as $key => $value) {
            # code...
            $arrk[$i]=$key."=".$value;
            $i++;
        }
        $v=implode(",", $arrk);
        $sql="update ".$this->table." set ".$v.$this->where;
        $stmt=$this->bind($sql);
        $res=$stmt->rowCount();
        return $r;
    }

    /*
    实现预处理,动态参数绑定,执行sql语句
    */
    function bind($sql){
        $stmt=self::$conn->prepare($sql);
        foreach ($this->arrv as $key => $value) {        //动态参数绑定
            $stmt->bindValue($key,$value);
        }
        $stmt->execute();
        return $stmt;
    }
}

/**********************************************************************
单例模式:保证系统中只有一个实例
1.this是指向对象实例的一个指针
2.self是类本身的引用self::$pdo,Db::$pdo
3.parent是对父类的引用
4.直接通过Db::connect()调用静态函数
5.静态成员变量只有new Db的时候初始化值
6.静态函数只能访问静态成员变量,不能访问普通成员变量
7.通过定义私有构造函数,拷贝函数,阻止外部实例化类,因为私有属性只能在函数内部调用
************************************************************************/

github:https//github.com/comeonjy/php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值