原创

PHP-lib-mysql.func.php-封装mysqli数据库操作(单例模式)

mysql.func.php

<?php
/**
 * 说明:废弃 ! 连接数据库的操作
 * 作者:
 * @return resource
 * 创建时间:2058-3-21 下午09:32:58
 */
function connect(){
    $link=    mysqli_connect(DB_HOST,DB_USER,DB_PWD) or  die('数据库失败Error:'.mysqli_errno().':'.mysqli_error());
    mysqli_set_charset($link,DB_CHARSET);
    mysqli_select_db($link,DB_DBNAME) or die('指定数据库打开失败');
    //$link较高版本中这个$link获取传入到mysql_query()方法中.
    //    $link = Db::getInstance()->connect();
    return $link;
}

/**
 * 说明:单例模式获取的数据库连接对象,本页面代码所有连接、操作数据库都采用较高版本的mysqli_*方法
 * 作者:
 * 创建时间:2058-3-21 下午10:42:22
 */

function getDbConn(){
    $link = Db::getInstance()->connect();
    return $link;
}

/**
 * 说明:完成记录插入的操作
 * 作者:
 * @param string $table
 * @param array $array
 * @return number
 * 创建时间:2058-3-21 下午09:32:40
 */

function insert($table,$array){
    $keys = join(",", array_keys($array));//啥意思?
    $vals = "'".join("','", array_values($array))."'";
    // 首尾"'"分别添加,中间把$array分割并使用','拼接
    $sql = "insert into {$table}($keys) values({$vals})";
    //var_dump($sql);
    //exit();
    mysqli_query(getDbConn(),$sql);
    return mysqli_insert_id(getDbConn());
}

/**
 * 说明:完成记录插入操作
 * 作者:
 * @param string $table
 * @param array $array
 * @param string $where
 * @return number 返回-1 表示失败,至少要判断 >0
 * 创建时间:2058-3-21 下午09:42:56
 */
// update imooc_admin set username='king' where id = 1;
function update($table,$array,$where=null){
    $str=null;
    foreach ($array as $key=>$val){
        if($str==null){
            $sep="";
        }else{
            $sep=",";
        }
        $str.=$sep.$key."='".$val."'";
    }
    $sql ="update {$table} set {$str}".($where == null?null:" where ".$where);
    $result = mysqli_query(getDbConn(),$sql);//这里的失败会返回false 优化
    if($result){//这里必须判断
        return mysqli_affected_rows(getDbConn());
    }else{
        return false;
    }

}

/**
 * 说明:删除记录
 * 作者:
 * @param string $table
 * @param string $where
 * @return number 返回-1 表示失败,至少要判断 >0
 * 创建时间:2058-3-21 下午09:46:27
 */

function delete($table,$where){
    $where =($where ==null?null:" where ".$where);
    $sql = "delete from {$table}{$where}";
    $result = mysqli_query(getDbConn(),$sql);//这里的失败会返回false 优化
    if($result){//这里必须判断
        return mysqli_affected_rows(getDbConn());
    }else{
        return false;
    }
}

/**
 * 说明:得到制定的一条记录
 * 作者:
 * @param string $sql
 * @param string $result_type
 * @return multitype:
 * 创建时间:2058-3-21 下午09:49:11
 */

function fetchOne($sql,$result_type=MYSQLI_ASSOC){
    $result = mysqli_query(getDbConn(),$sql);
    $row = mysqli_fetch_array($result,$result_type);
    return $row;
}

/**
 * 说明:得到结果集的所有记录
 * 作者:
 * @param string $sql
 * @param string $result_type
 * @return multitype:
 * 创建时间:2058-3-21 下午09:52:20
 */

function fetchAll($sql,$result_type=MYSQLI_ASSOC){
    $result = mysqli_query(getDbConn(),$sql);
    //var_dump($sql);
    $rows = array();//这里要定义一下
    while (@$row = mysqli_fetch_array($result,$result_type)){
        $rows[] = $row;
    }
    return $rows;
}

/**
 * 说明:得到结果集的条数
 * 注意:发现此方法会自动对单引号转义 导致出错 后期查看原项目中的用法
 * 暂时使用fetchAll代替
 * 作者:
 * @param string $sql
 * @return number
 * 创建时间:2058-3-21 下午09:54:19
 */

function getResultNum($sql){
    $result = mysqli_query(getDbConn(),$sql);
    return mysqli_num_rows($result);
}


/**
 * 得到上一步插入记录的id
 */
function getInsertId(){
    return mysqli_insert_id(getDbConn());
}

class Db{
    private static  $_instance;
    private static  $_connectSource;
    private $_dbConfig =array(//DB_USER,DB_PWD
        'host'=>DB_HOST,
        'user'=>DB_USER,
        'password'=>DB_PWD,
        'database'=>DB_DBNAME
    );
    private function __construct(){

    }

    public static function getInstance(){
        if(!(self::$_instance instanceof self)){
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    /*
     * 注意在php较高版本中,本次测试环境是php5.5,mysqli_select_db 和 mysqli_query 的参数顺序与
     * mysql_select_db()和 mysql_query()的顺序正好相反。mysqli_*** 为新方法。
     */
    public function connect(){

        if(!self::$_connectSource ){
            self::$_connectSource = mysqli_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);
            if(!self::$_connectSource){
                throw new Exception("mysql connect error ".mysqli_connect_error());//无mysqli.error() 方法
                return;
                //die("mysql connect error ".mysql.error());
            }
            mysqli_select_db(self::$_connectSource ,$this->_dbConfig['database']);
            mysqli_query(self::$_connectSource,"set names UTF8");
        }
        return self::$_connectSource;
    }
}
正文到此结束
本文目录