BaseModel 基礎Model類 其他的資料庫表類文件都基礎此類 當前鏈接的是sql service的資料庫 mysql的只需要修改query和execute就行 資料庫表的Model類 繼承 BaseModel類 實例: ...
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));