资讯专栏INFORMATION COLUMN

No-PDO-Models-MySQL数据库层抽象类 - 实现

MarvinZhang / 1989人阅读

摘要:数据库抽象层实现已废弃数据库类,实现接口王扶林王扶林数据库连接标识数据库查询结果集插入语句最后执行的最后自增索引值待判断的数组若数组为关联数组,返回,否则返回传入的数据库的名称可选参数,默认为数据库传入的数据库的服务器地址可选参数,默

数据库抽象层实现 mysql_connect (已废弃)
_dbConnect = @mysql_connect($dbhost, $dduser, $dbpwd);
        //连接数据库
        if (false == $this->_dbConnect) {
            throw new Exception("数据库连接错误".mysql_error());        
        }
        //选择数据库
        if (!@mysql_select_db($dbname,$this->_dbConnect)) {
            throw new Exception("数据库选择错误" . mysql_error());        
        }
        //设置字符编码
        $this->setCharset();
    }

    /**
     * __destruct
     *
     *析构函数,释放结果集资源
     *@return nulll 
     * 
     */
    public function __destruct(){
        //释放结果集
        $this->freeResult();
        //关闭数据库连接
        if ($this->_dbConnect) {
            mysql_close($this->_dbConnect);
        }
    }

    /**
     * select 
     *
     * 获得数据表中所有满足特定条件的记录
     *
     * @param  string  $tableName     必要参数,待查询的数据表
     * @param  array   $condition     查询条件(可选参数,为一关联数组,默认为null    )
     * @param  int     $recordBegin   从某项记录开始查询(可选参数,默认情况为0,从第一条记录开始查询)
     * @param  int     $recordLength  待查询记录的个数(可选参数,默认情况为所有记录)
     * @param  string  $sortCol       待排序的字段名(可选参数,默认情况为不排序)
     * @param  boolean $desc          是否为降序排序(可选参数,默认为升序排序)
     * @return array                  有结果集组成的二维数组(每个元素为关联数组,代表一条记录)
     */
    public function select($tableName, Array $condition = null,
                          $recordBegin = 0,$recordLength = 0,$sortCol = null,
                          $desc = false)
    {
        //构造SQL 语句
        $sql = "SELECT * FROM {$tableName}";
        //传入的条件参数为真并且是关联数组
        if ($condition) {
            if (!self::isAssocArray($condition)) {
                //若不是关联数组
                throw new Exception("必须传入一个关联数组的条件");
            }else{
                //遍历条件数组,构造条件语句
                $sql .= $this->generateWhere($condition);
            }
        }
        //处理是否排序
        if ($sortCol) {
                $sql .= " ORDER BY {$sortCol}"; 
        }
        //处理是否降序
        if ($desc) {
            $sql .= " DESC";
        }
        //处理记录的个数 (若处理的记录个数不为 0)
        if (0 != $recordLength) {
            $sql .= " limit {$recordBegin} ,{$recordLength}";
        }else if(0 != $recordBegin){
            $sql .= " limit {$recordBegin}";
        }

        //执行SQL 语句
        $this->_result = @mysql_query($sql);

        if (!$this->_result) {
                throw new Exception("执行SQL语句出错". mysql_error());
        }
        //获得查询结果
        $rows = array();
        while ($row = mysql_fetch_assoc($this->_result)) {
            $rows[] = $row;
        }
        //释放结果集
        $this->freeResult();
        //返回结果集组成的关联数组
        return $rows;
    }

    public function delete($tableName ,Array $condition)
    {
        //构造SQL语句
        $query = "DELETE FROM {$tableName} ";
        //由条件数组,构造删除条件
        if (!self::isAssocArray($condition)) {
            //若不是关联数组
            throw new Exception("必须传入一个关联数组的条件");        
        }else{
            $query .=  $this->generateWhere($condition);
        }

        //执行SQL语句
        $result = @mysql_query($query);

        if (!$this->_result) {
                throw new Exception("执行SQL语句出错".mysql_error());
        }
        //返回受影响个数
        return mysql_affected_rows();
    }

    /**
     * insert()
     * @param  string $tableName 待插入的数据表名
     * @param  Array  $records   带插入的记录所组成的二维数组
     * @return int               所受影响的行数
     */
    public function insert($tableName, Array $records)
    {
        //构造SQL语句
        $query = "INSERT INTO {$tableName} VALUES";
        //待处理插入的记录数组
        $query .= " (";
        foreach($records as $red){
            //处理每一条插入记录
            //生成记录信息
            foreach($red as $value){
                if (is_string($value) && $value !== "null" 
                    && $value !== "now()" ) {
                    $query .= ""{$value}",";
                }else{
                    $query .= "{$value}, ";
                }
            }
            //除去value的最后 字符连接 ,
            $query = rtrim($query, ",");
            //数据项SQL 语句的闭合
            $query .= "), (";
        }
        $query .= ")";
        $query = rtrim(rtrim(rtrim($query, "()")), ",");
        //echo $query;
        //echo "
"; //执行SQL 语句 $this->_result = @mysql_query($query); if(!$this->_result){ throw new Exception("插入SQL 语句出错". mysql_error()); } //获得插入记录的最大自增索引 $this->insertId = @mysql_insert_id(); //返回受影响的个数 return mysql_affected_rows(); } public function update($tableName,Array $condition, Array $newRecord) { //构造SQL语句 $query = "UPDATE {$tableName} SET "; // if (!self :: isAssocArray($newRecord)) { throw new Exception("记录的新值必须传入一个关联数组的条件"); } else { //生成记录信息 foreach ($newRecord as $key => $value) { $nKey = " {$key} = "; if (is_string($value) && ($value !== "null") && ($value !== "now()")) { //若$value为字符串 $nKey .= ""{$value}","; } else { $nKey .= "{$value},"; } } $nKey = rtrim($nKey, ","); $query .= $nKey; } //由传入的条件数组,构造更新条件 if (!self :: isAssocArray($condition)){ //若不为关联数组 throw new Exception("必须传入一个关联数组的条件"); } else { $query .= $this->generWhere($condition); } //执行SQL语句 $result = @mysql_query($query); if (!$this->_result) { throw new Exception("执行SQL语句出错." . mysql_error()); } //返回受影响个数 return mysql_affected_rows(); } /** * selectAll() * * 获得数据表中的所有记录的所有字段 * * @param string $tableName 待查询的数据表名 * @return array 所有记录组成的一个二维数组(每个元素为一个关联数组,代表一条记录) */ public function selectAll($tableName) { return $this->select($tableName); } /** * selectById * * 通过主键获得某一条记录,主键由可选参数传入 * * @param string $tableName 数据表名 * @param integer $id 获得记录的主键ID值 (可选参数默认值ID为1) * @param string $key 主键的字段名(可选参数,默认为ID) * @return array 所获得记录产生的关联数组 */ public function selectById($tableName, $id = 1,$key = "id") { //构造query语句 $query = "SELECT * FROM {$tableName} WHERE {$key} = {$id}"; //执行SQL 语句 $this->_result = @mysql_query($query); if (!$this->_result) { throw new Exception("执行主键查询出错".mysql_error()); } //获得查询结果 if (1 != @mysql_num_rows($this->_result)) { throw new Exception("主键记录查询出现多条" . mysql_error()); } $rows = mysql_fetch_assoc($this->_result); //释放结果集 $this->freeResult(); //返回结果集组成的关联数组 return $rows; } /** * selectBySql() * * 通过传入的SQL语句,获得查询结果 * * @param string $query 待查询的SQL语句 * @return array $rows 所有记录组成的一个二维数组(每个元素为关联数组,代表一条记录) */ public function selectBySql($query) { //执行SQL语句 $this->_result = @mysql_query($query); if (!$this->_result) { throw new Exception("执行SQL语句出错." . mysql_error()); } //获得查询结果 $rows = array(); while ($row = mysql_fetch_assoc($this->_result)) { $rows[] = $row; } //释放结果集 $this->freeResult(); //返回结果集组成的关联数组 return $rows; } /** * setCharset * * 设置Mysql数据库显示字符编码,由传入参数决定字符编码 * * @param string $charset 待设置的字符编码(可选参数,默认为UTF8) * @return null 无 */ private function setCharset($charset = "UTF-8") { if ($this->_dbConnect) { mysql_query("set names {$charset}",$this->_dbConnect); } } /** * generateWhere() *由传入的条件数组,构造where子句 * * @param Array $condition 由条件语句组成的关联数组的 * @return string 构造生成的Where语句字符串 */ private function generateWhere(Array $condition) { $con = "WHERE"; foreach($condition as $key => $value){ if (is_string($value)) { $con .= "{$key} = "{$value}" and"; }else{ $con .= "{$key} = {$value}"; } } $con = rtrim($con ,"and"); return $con; } /** * freeResult * * 释放MySQL结果集资源 * * @param null 无 * @return null 无 */ public function freeResult() { if ($this->_result) { if (!@mysql_free_result($this->_result)) { throw new Exception("释放结果集出错" . mysql_error()); } $this->_result = null; } } }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22790.html

相关文章

  • No-PDO-Models-MySQL据库抽象

    摘要:数据库抽象层面实现已废弃抽象类数据库接口王扶林王扶林获取某一条的记录数据表名待获得记录的主键值可选参数默认获得为的记录主键字段名可选参数,默认值为有赋值的主键获得记录的各个字段组成的条数据项关联数组获得数据表中的所有满足特定条件的记录必 数据库抽象层面 mysql_connect 实现 (已废弃)

    CoderDock 评论0 收藏0
  • No-PDO-Models-MySQL据库抽象

    摘要:数据库抽象层面实现已废弃抽象类数据库接口王扶林王扶林获取某一条的记录数据表名待获得记录的主键值可选参数默认获得为的记录主键字段名可选参数,默认值为有赋值的主键获得记录的各个字段组成的条数据项关联数组获得数据表中的所有满足特定条件的记录必 数据库抽象层面 mysql_connect 实现 (已废弃)

    zhonghanwen 评论0 收藏0
  • 读懂 SOLID 的「里氏替换」原则

    摘要:什么是里氏替换原则某个对象实例的子类实例应当可以在不影响程序正确性的基础上替换它们。除了在编程语言层面,在前端实际工作中,你可能会听到一个叫作的概念,这个概念我认为也是里氏替换原则的一直延伸。 这是理解SOLID原则,关于里氏替换原则为什么提倡我们面向抽象层编程而不是具体实现层,以及为什么这样可以使代码更具维护性和复用性。 什么是里氏替换原则 Objects should be rep...

    vibiu 评论0 收藏0
  • 【设计模式】组合模式之神经网络应用

    摘要:问题引入试想,一个对象本身和由对象组成的一个集合都需要支持逻辑上相同的操作,实际实现可能不一样既然在语义这个更高级抽象可以把两者统一,那么如果这两者都继承同一个基类岂不是更好一个可以类比的例子是,目录本身可能包含多个目录,在没有子目录的情况 问题引入 试想,一个对象本身和由对象组成的一个集合都需要支持逻辑上相同的操作,实际实现可能不一样.既然在语义这个更高级抽象可以把两者统一,那么如果...

    XiNGRZ 评论0 收藏0
  • 【设计模式】组合模式之神经网络应用

    摘要:问题引入试想,一个对象本身和由对象组成的一个集合都需要支持逻辑上相同的操作,实际实现可能不一样既然在语义这个更高级抽象可以把两者统一,那么如果这两者都继承同一个基类岂不是更好一个可以类比的例子是,目录本身可能包含多个目录,在没有子目录的情况 问题引入 试想,一个对象本身和由对象组成的一个集合都需要支持逻辑上相同的操作,实际实现可能不一样.既然在语义这个更高级抽象可以把两者统一,那么如果...

    Salamander 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<