<?php
// 所有数据表的基类
abstract class Model {protected $tableName = "";protected $pdo = "";protected $sql="";function __construct() {$pdo = new PDO( "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD );$pdo->exec ( "set names " . DB_CHARSET );$this->pdo = $pdo;}function updatetone($where=''){$sql = 'UPDATE ' . $this->tableName . ' SET clicknum=clicknum+1'. ($where == NULL ? $where : ' WHERE ' . $where);$this->sql=$sql;return $this->pdo->exec ( $sql );}/*** 获取总记录数 select count(*) as num from news where cateid=5*/function count($where=""){$where = empty($where) ? "" : " where ".$where;$sql="select count(*) as num from {$this->tableName} $where";$this->sql=$sql;$pdoS=$this->pdo->query($sql);$arr=$pdoS->fetch(PDO::FETCH_ASSOC);return $arr['num'];}/*** 增加* array $arr=array('字段名'=>值,....) exp:array('username'=>'xiaowang','password'=>'123456')*/function insert($arr) {// 把数组转化成sql语句// sql语句是php向mysql,告诉她给我写一条记录进表// insert into 表名(字段列表) value(数据列表)// insert into adminuser(username,password) value('xiaowang','123456')$fiedList = "";$valueList = "";foreach ( $arr as $k => $v ) {$fiedList .= "," . $k;$valueList .= ",'" . $v . "'";}$fiedList = substr ( $fiedList, 1 );$valueList = substr ( $valueList, 1 );// 拼sql$sql = "insert into {$this->tableName}({$fiedList}) value({$valueList})";$this->sql=$sql;// 执行$re = $this->pdo->exec ( $sql );if ($re) {// 返回主键idreturn $this->pdo->lastInsertId ();} else {return false;}}// 查询function findByPk($id) {// 获取表的主键名称 desc 表名$pdoS = $this->pdo->query ( "desc " . $this->tableName );$arr = $pdoS->fetchAll ( PDO::FETCH_ASSOC );foreach ( $arr as $v ) {if ($v ['Key'] == 'PRI') {$fieldName = $v ['Field'];break;}}$sql = "select * from {$this->tableName} where $fieldName=$id";$this->sql=$sql;$pdoS = $this->pdo->query ( $sql );return $pdoS->fetch ( PDO::FETCH_ASSOC );}/*** 查询多条记录* array $arr 用来管理查询语句的子句* array('limit'=>'0,5','where'=>"id=5")*/function findAll($arr = array()) {// select 字段列表 from 表名// where 条件 group by 字段 having 条件 order by 字段 desc|asc limit start,length// select 字段列表 from 表1 as t1 join 表2 as t2 on t1.字段=t2.字段 join 表3 as t3 on t2.字段=t3.字段// 拼sql语句$field = isset ( $arr ['field'] ) ? $arr ['field'] : "*";$where = isset ( $arr ['where'] ) ? " where " . $arr ['where'] : '';$group = isset ( $arr ['group'] ) ? " group by " . $arr ['group'] : '';$having = isset ( $arr ['having'] ) ? " having " . $arr ['having'] : "";$order = isset ( $arr ['order'] ) ? " order by " . $arr ['order'] : '';$limit = isset ( $arr ['limit'] ) ? " limit " . $arr ['limit'] : '';$alias = isset ( $arr ['alias'] ) ? " as " . $arr ['alias'] : "";$join = isset ( $arr ['join'] ) ? " join " . $arr ['join'] : '';$sql = "select $field from {$this->tableName} $alias $join $where $group $having $order $limit";$this->sql=$sql;$pdoS = $this->pdo->query ( $sql );if (is_object ( $pdoS )) {return $pdoS->fetchAll ( PDO::FETCH_ASSOC );} else {return array ();}}function delete($where = NULL) {$sql = 'DELETE FROM ' . $this->tableName . ($where == NULL ? $where : ' WHERE ' . $where);$this->sql=$sql;return $this->pdo->exec ( $sql );}function update($bind, $where = NULL) {$set = NULL;foreach ( $bind as $field => $value ) {if (is_null ( $set )) {$set .= $field . "='" . $value . "'";} else {$set .= ',' . $field . "='" . $value . "'";}}$sql = 'UPDATE ' . $this->tableName . ' SET ' . $set . ($where == NULL ? $where : ' WHERE ' . $where);$this->sql=$sql;return $this->pdo->exec ( $sql );}function query($sql){//判断是更新语句,还是查询语句if(preg_match("/^select/i",$sql)){$pdoS=$this->pdo->query($sql);return $pdoS->fetchAll(PDO::FETCH_ASSOC);}else{return $this->pdo->exec($sql);}}function getLastSql(){return $this->sql;}
}