程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 數據庫類 適用於 mysql sql service,mysqlsql

php 數據庫類 適用於 mysql sql service,mysqlsql

編輯:關於PHP編程

php 數據庫類 適用於 mysql sql service,mysqlsql


BaseModel 基礎Model類 其他的數據庫表類文件都基礎此類 當前鏈接的是sql service的數據庫 mysql的只需要修改query和execute就行

<?php
/**
 * 數據庫基礎類
 * @author ***
 */
abstract class BaseModel
{
    static $model;
    private $sql;
    private $PrimaryKeyField; //主鍵字段名
    private $field_values;//存放數據庫字段數組
    protected $db;
    protected $pk; //主鍵
    protected $table;
    protected $field = '*';
    protected $where;
    protected $orderby;
    protected $limit;
    protected $groupby;
    
    /**
     * 初始化
     *
     * @global array $TmacConfig
     */
    public function __construct()
    {
        $this->db = $this->getDB();
    }
    
    private function getDB()
    {
        if(empty(self::$model)){
            $mssql = new Mssql(DB_DEFAULT_HOST, DB_DEFAULT_NAME, DB_DEFAULT_PASSWD, DB_DEFAULT_DATABASE);
            self::$model = $mssql->getInstance();
        }
        return self::$model;
    }
    
    /**
     * 設置SQL語句
     */
    private function setSQL($sql)
    {
        $this->sql = $sql;
    }

    /**
     * 獲取SQL語句
     */
    function getSQL()
    {
        return $this->sql;
    }

    /**
     * 設置field_values
     */
    function setFieldValues(array $field_values)
    {
        $this->field_values = $field_values;
    }
    
    /**
     * 獲取field_values
     */
    private function getFieldValues()
    {
        return $this->field_values;
    }

    /**
     * 設置主鍵字段名
     */
    protected function setPrimaryKeyField($PrimaryKeyField)
    {
        $this->PrimaryKeyField = $PrimaryKeyField;
    }
    
    /**
     * 獲取主鍵字段名
     */
    protected function getPrimaryKeyField()
    {
        return $this->PrimaryKeyField;
    }
    
    /**
     * 設置表名
     */
    protected function setTable($table)
    {
        $this->table = $table;
    }
    
    /**
     * 獲取表名
     */
    protected function getTable()
    {
        return $this->table;
    }
    
    /**
     * 設置主鍵
     */
    function setPk($pk)
    {
        $this->pk = $pk;
    }
    
    /**
     * 獲取主鍵
     */
    function getPk()
    {
        return $this->pk;
    }

        /**
     * 設置Fields
     */
    function setFields($fields)
    {
        $this->field = $fields;
    }
    
        /**
     * 獲取Fields
     */
    function getFields()
    {
        return $this->field;
    }
    
    /**
     * 設置where條件
     */
    function setWhere($where)
    {
        $this->where = $where;
    }
    
    /**
     * 獲取where條件
     */
    function getWhere()
    {
        return $this->where;
    }
    
    /**
     * 設置Group
     */
    function setGroupBy($groupby)
    {
        $this->groupby = $groupby;
    }
    
    /**
     * 獲取Group
     */
    function getGroupBy()
    {
        return $this->groupby;
    }
    
    /**
     * 設置Order
     */
    function setOrderBy($orderby)
    {
        $this->orderby = $orderby;
    }
    
    /**
     * 設置Order
     */
    function getOrderBy()
    {
        return $this->orderby;
    }
    
    /**
     * 設置條數
     */
    function setLimit( $limit )
    {
        $this->limit = $limit;
    }
    
    /**
     * 獲取條數
     */
    function getLimit()
    {
        return $this->limit;
    }
    
    /**
     * 根據主鍵獲取
     */
    function getInfoByPk()
    {
        $sql = "select {$this->getFields()} "
            ."from {$this->getTable()} "
            ."where {$this->getPrimaryKeyField()}={$this->getPk()}";
        $result = $this->query($sql);
        if ($result != NULL){
            $result = $result[0];
        }
        return $result;
    }
    
    /**
     * 根據where條件獲取一條信息
     */
    function getOneByWhere()
    {
        $sql = "SELECT {$this->getFields()} "
                . "FROM {$this->getTable()} "
                . "WHERE {$this->getWhere()}";
        $res = $this->query( $sql );
        return $res[0];
    }
    
    /**
     * 根據where條件獲取數組列表
     */
    function getListByWhere()
    {
        $sql = "SELECT ";
        if ( $this->getLimit() != null ) {
            $line_str = $this->getWhere() != null ? "AND " : "WHERE ";
            if (strpos($this->getLimit(), ',') !== FALSE){
                list($page, $count) = explode(',', $this->getLimit());
                $page_str = $count*($page-1);
                $sql .= "TOP $count ";
            } else {
                $sql .= "TOP {$this->getLimit()} ";
            }
        }
        $sql .= "{$this->getFields()} "
                . "FROM {$this->getTable()} ";
        if ( $this->getWhere() != null ) {
            $sql .= "WHERE {$this->getWhere()} ";
        }
        if (isset($page_str) && $page_str != NULL){
            $line_str = $this->getWhere() != null ? "AND " : "WHERE ";
            $sql .= "{$line_str} {$this->getPrimaryKeyField()} not in (select top $page_str {$this->getPrimaryKeyField()} from {$this->getTable()}) ";
        }
        if ( $this->getGroupby() != null ) {
            $sql .= "GROUP BY {$this->getGroupby()} ";
        }
        if ( $this->getOrderby() != null ) {
            $sql .= "ORDER BY {$this->getOrderby()} ";
        }
        $res = $this->query( $sql );
        return $res;
    }
    
    /**
     * 根據where獲取count
     */
    function getCountByWhere()
    {
        $sql_count = "SELECT COUNT(*) AS total FROM {$this->getTable()} ";
        if ( $this->getWhere() != null ) {
            $sql_count .= "WHERE " . $this->getWhere();
        }
        $count = $this->query( $sql_count );
        return $count != NULL ? $count[0]['total'] : 0;
    }


    /**
     * 根據主鍵更新
     */
    function updateByPk($fieldList)
    {
        $sql = "UPDATE {$this->getTable()} SET ";
        foreach ($this->getFieldValues() as $key => $one){
            if ($one != NULL){
                $sql .= "$key='$one',";
            }
        }
        $sql = rtrim($sql, ',');
        $sql .= " WHERE {$this->getPrimaryKeyField()}='{$this->getPk()}'";
        return $this->execute($sql);
    }
    
    /**
     * 根據WHERE更新
     */
    function updateByWhere($fieldList)
    {
        $sql = "UPDATE {$this->getTable()} SET ";
        foreach ($this->getFieldValues() as $key => $one){
            if ($one != NULL){
                $sql .= "$key='$one',";
            }
        }
        $sql = rtrim($sql, ',');
        $sql .= " {$this->getWhere()}";
        return $this->execute($sql);
    }
    
    /**
     * 根據WHERE更新
     */
    function insert($fieldList)
    {
        $sql_values = '';
        $sql = "INSERT INTO {$this->getTable()} (";
        foreach ($this->getFieldValues() as $key => $one){
            if ($one != NULL){
                $sql .= "$key,";
                $sql_values .= "'$one',";
            }
        }
        $sql = rtrim($sql, ',').") VALUES (".rtrim($sql_values, ',').")";
        return $this->execute($sql);
    }
    
    /**
     * odbc query操作
     */
    private function query($sql)
    {
        $this->setSQL($sql);
        $data = array();
        $sql = iconv('UTF-8', 'GBK', $sql);
        if (self::$model == NULL){
            throw new Exception("數據庫連接失敗");
        }
        $result = odbc_do(self::$model, $sql);
        if ($result != NULL){
            while($res = odbc_fetch_array($result)){
                foreach ($res as $key => $one){
                    $res[$key] = iconv('GBK', 'UTF-8', $one);
                }
                $data[] = $res;
            }
        }
        return $data;
    }
    
    /**
     * odbc execute
     */
    private function execute($sql, $iconv = TRUE)
    {
        $this->setSQL($sql);
        if ($iconv){
            $sql = iconv('UTF-8', 'GBK', $sql);
        }
        if (self::$model == NULL){
            throw new Exception("數據庫連接失敗");
        }
        return odbc_exec(self::$model, $sql);
    }


    //析構函數,自動關閉數據庫,垃圾回收機制
    function __destruct() {
        odbc_close(self::$model);
    }

}



// ++++++++++++++++++++++++++++++++++++++++++++++++
                // 自定義類庫
                // mssql 鏈接類
// ++++++++++++++++++++++++++++++++++++++++++++++++
//一個普遍通用的PHP連接MYSQL數據庫類
class Mssql {
    static $conn_line;
    private $db_host; //數據庫主機
    private $db_user; //數據庫用戶名
    private $db_pwd; //數據庫用戶名密碼
    private $db_database; //數據庫名
            
    function __construct($db_host, $db_user, $db_pwd, $db_database) {
        $this->db_host = $db_host;
        $this->db_user = $db_user;
        $this->db_pwd = $db_pwd;
        $this->db_database = $db_database;
    }

    /**
     * 單例模式處理數據庫連接
     */
    function getInstance()
    {
        if (empty(self::$conn_line)){
            $connstr = "Driver={SQL Server};Server=".$this->db_host.";Database=".$this->db_database;
            self::$conn_line = odbc_connect($connstr, $this->db_user, $this->db_pwd);
        }
        return self::$conn_line;
    }
}

數據庫表的Model類 繼承 BaseModel類

<?php
/**
 * 游戲截圖類
 * @author ***
 */
class GameImagesModel extends BaseModel
{
    private $field_values = array(
        'game_id' => '',//key為數據庫字段名
        'img_url' => '',
        'atime' => '',
        'add_user' => '',
    );
    
    function __construct() {
        parent::__construct();
        $this->setTable('game_images');
        $this->setPrimaryKeyField('id');
    }
    
    /**
     * 字段處理函數
     * @param array $field_values
     */
    function setFieldValues(array $field_values) {
        foreach ($field_values as $key => $one){
            if (!array_key_exists($key, $this->field_values)){
                throw new Exception($key."不存在");//判斷前端傳來的數據是否合理
            }
        }
        parent::setFieldValues($field_values);
    }
}

實例:

// 對於GameDetail表的操作
$detail_model = new GameDetailModel();
// 查詢
$detail_model->setFields('DId');
$detail_model->setWhere("1=1");
$detail_model->setOrderBy("DId DESC");
$detail_model->setLimit("1");
$insert_id = $detail_model->getListByWhere();

// 更新 data的key需要和Model裡面設置的對照 也就是數據庫的字段
$data = array(
        'GameName' => $name,
        'Subject' => $subject,
        'Grade' => $grade,
        'Teach' => $teach,
        'Point' => $point,
        'IsFree' => $free,
        'Detail' => $detail,
        'AddTime' => $_time
);
$detail_model->setPk($id);
$detail_model->updateByPk($detail_model->setFieldValues($data));


// 對於GameImages表的操作
// 插入
$image_fields = array(
        'game_id' => $id,
        'img_url' => $image_path,
        'atime' => $_time,
        'add_user' => $user_id,
);
$images_model = new GameImagesModel();
$images_model->insert($images_model->setFieldValues($image_fields));

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved