MVC中帶PDO預處理的Model基類

<?php
class Model{
	protected $tableName='';
	protected $pdo = '';
	function __construct($tableName=''){
		if(!empty($tableName)){
			$this->tableName = $tableName;
		}
		//實例化PDO
		$pdo = new PDO('mysql:host=localhost;dbname=company','root','root');
		$pdo->exec('set names utf8');
		$this->pdo = $pdo;
	}
	
	//表添加記錄
	public function add($arr){
		//產生sql語句
		$sqlFieldStr = '';
		$sqlParamStr = '';
		$i = 0;
		foreach($arr as $k=>$v){
			$sqlFieldStr .= 	','.$k;
			$sqlParamStr .= ',:p'.$i;
			$i++;
		}
		$sqlFieldStr = substr($sqlFieldStr,1);
		$sqlParamStr = substr($sqlParamStr,1);
		$sql = "INSERT INTO {$this->tableName}({$sqlFieldStr}) VALUES({$sqlParamStr})";
		//準備執行 $this->pdo->prepare('INSERT INTO news(title,content) values(:p0,:p1)
		$pdoStatement = $this->pdo->prepare($sql);
		//綁定數據
		$i = 0;
		foreach($arr as $v){
			$varName = 'var'.$i;
			$$varName = $v;
			if(is_int($v)){
				$pdoStatement->bindParam(':p'.$i,$$varName,PDO::PARAM_INT);
			}else{
				$pdoStatement->bindParam(':p'.$i,$$varName,PDO::PARAM_STR);
			}
			$i++;
		}
		//執行
		$re = $pdoStatement->execute();
		return $re;
	}
		
	//獲取最後插入的記錄的主鍵ID
	public function getPrimaryKey(){
		return $this->pdo->LastInsertId();
	}
	
	//刪除
	public function delete($where ,$params){
		//delete from news where id=:id
		$where = empty($where) ? '' : 'WHERE ' .$where;
		$sql = "DELETE FROM {$this->tableName} {$where}";
		$pdoStatement = $this->pdo->prepare($sql);
		//綁定數據
		$i = 0;
		foreach($params as $k=>$v){
			$varName = 'var'.$i;
			$$varName = $v;
			if(is_int($v)){
				$pdoStatement->bindParam($k,$$varName,PDO::PARAM_INT);
			}else{
				$pdoStatement->bindParam($k,$$varName,PDO::PARAM_STR);
			}
		}
		//執行
		$re = $pdoStatement->execute();
		return $re;
	}
				
	//更新數據
	public function update($arr,$where="",$params=array()){
		$where = empty($where) ? '' : 'WHERE '.$where;
		//拼寫sql語句:UPDATE news SET 字段名=:p0,字段名=:p1,... WHERE id=:id;
		$i = 0;
		$setStr = '';
		foreach($arr as $k=>$v){
			$setStr .= ','.$k.'=:p'.$i;
			$i++;
		}
		$setStr = substr($setStr, 1);
		$sql = "UPDATE {$this->tableName} SET {$setStr} {$where}";
		//預處理一條sql語句
		$pdoStatement = $this->pdo->prepare($sql);
		//綁定數據
		$i = 0;
		foreach($arr as $v){
			//使用一個動態變量,防止$v被覆蓋;
			$varName = 'var'.$i;
			$$varName = $v;
			if(is_int($v)){
				$pdoStatement->bindParam(':p'.$i,$$varName,PDO::PARAM_INT);
			}else{
				$pdoStatement->bindParam(':p'.$i,$$varName,PDO::PARAM_STR);
			}
			$i++;
		}
		//綁定where條件中的數據 where id=:id array(':id'=>$id)
		foreach($params as $k=>$v){
			$varName = 'var'.$i;
			$$varName = $v;
			if(is_int($v)){
				$pdoStatement->bindParam($k,$$varName,PDO::PARAM_INT);
			}else{
				$pdoStatement->bindParam($k,$$varName,PDO::PARAM_STR);
			}
			$i++;
		}
		//執行
		return $pdoStatement->execute();
	}
	
	//查詢操做
	public function select($fields='*',$where='',$limit='',$order='',$params=array()){
		$where = empty($where) ? '' : 'WHERE '.$where;
		$limit = empty($limit) ? '' : 'LIMIT '.$limit;
		$order = empty($order) ? '' : 'ORDER BY '.$order;
		//預處理sql語句  SELECT * FROM tablename ....
		$sql = "SELECT {$fields} FROM {$this->tableName} $where $order $limit";
		$pdoStatement = $this->pdo->prepare($sql);
		//綁定數據
		$i = 0;
		foreach($params as $k=>$v){
			$varName = 'var'.$i;
			$$varName = $v;
			if(is_int($v)){
				$pdoStatement->bindParam($k,$$varName,PDO::PARAM_INT);
			}else{
				$pdoStatement->bindParam($k,$$varName,PDO::PARAM_STR);
			}
			$i++;
		}
		//執行
		$re = $pdoStatement->execute();
		if($re){ //返回結果集
			return $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
		}else{
			return array();
		}
	}
}
相關文章
相關標籤/搜索