<?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) {
// 返回主键id
return $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;
}
}