PHP操作數據庫封裝類

<?php
namespace db;

/**
* 數據庫類
*/
class Db
{
	public $conn;
	public $tbl;

	function __construct($servername,$username,$password,$dbname,$table='')
   {
		$conn = new \mysqli($servername,$username,$password,$dbname);

		if ($conn->connect_error) {
		    die("連接失敗: " . $conn->connect_error);
		}
		$conn->query('set names utf8');
		$this->tbl = $table;

		$this->conn = $conn;
	}

	public function count($where="1=1",$field="id"){
		$conn = $this->conn;
		$sql = "SELECT COUNT($field) FROM $this->tbl WHERE $where";
		// echo $sql;exit;
		$retval = $conn->query($sql);
		if(!$retval){
			return 0;
		}
		$result = $retval->fetch_row();
		return $result[0];
	}

	//根據ID查找單條
	public function selectOne($id){
		$conn = $this->conn;
		$sql = "select * from $this->tbl where id=$id";
		$retval = $conn->query($sql);
		if(!$retval){
			$conn->close();
			throw new \Exception("no data by id=$id");
		}else{
			$result = $retval->fetch_assoc();
		}
		return $result;
	}

	//查詢所有方法 通用
	public function fetchAll($page,$pageindex,$field='*',$where='1=1',$order='id desc'){
		$offset = ($page-1)*$pageindex;
		$sql = "select $field from $this->tbl where $where order by $order limit $offset,$pageindex";
		$data = [];
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if($retval){
			if($retval->num_rows==0){
				$this->close();
				throw new \Exception('查不到任何數據');
			}
			while ($row = $retval->fetch_assoc()) {
				array_push($data,$row);
			}
			return $data;
		}else{
			$this->close();
			throw new \Exception('查不到任何數據');
		}
	}

	//查詢所有,但是沒有數據的時候不會報錯
	public function fetchAll_b($page,$pageindex,$field='*',$where='1=1',$order='id desc'){
		$offset = ($page-1)*$pageindex;
		$sql = "select $field from $this->tbl where $where order by $order limit $offset,$pageindex";
		$data = [];
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if($retval){
			if($retval->num_rows==0){
				return [];
			}
			while ($row = $retval->fetch_assoc()) {
				array_push($data,$row);
			}
			return $data;
		}else{
			return [];
		}
	}

	//獲取一條 通用
	public function fetch($field,$where,$order='id desc'){
		$sql = "select $field from $this->tbl where $where order by $order limit 0,1";
		$conn = $this->conn;
		$retval = $conn->query($sql);
		$row = $retval->fetch_assoc();
		if(count($row)==0){
			$this->close();
			throw new \Exception('沒有該數據');
		}
		return $row;
	}

	//獲取一條 專門用來獲取不到數據也不拋出錯誤
	public function fetch_b($field,$where,$order='id desc'){
		$sql = "select $field from $this->tbl where $where order by $order limit 0,1";
		
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if(!$retval){
			return false;
		}
		$row = $retval->fetch_assoc();
		$row = $row?$row:[];
		if(count($row)==0){
			return false;
		}
		return $row;
	}

	//修改數據庫 通用
	public function update($set,$where='1=1'){
		$conn = $this->conn;
		if(empty($set)){
			$this->close();
			throw new \Exception('update缺少 set');
		}
		$sql = "update `$this->tbl` set $set where $where";
		if($conn->query($sql)==true){
			return true;
		}else{
			$error = $conn->error;
			$this->close();
			throw new \Exception('update失敗'.$error);
		}
	}

	//關聯操作,不過必須自己使用 sql 語句
	public function queryJoin($sql){
		$conn = $this->conn;
		$data = [];
		$retval = $conn->query($sql);
		if(!$retval){
			$this->close();
			throw new \Exception('沒有任何數據');
		}
		if($retval->num_rows==0){
			$this->close();
			throw new \Exception('沒有任何數據');
		}
		while ($row = $retval->fetch_assoc()) {
			array_push($data,$row);
		}
		return $data;
	}

	//刪除
	public function delete($where,$tbl){
		$sql = "delete from $tbl where $where";
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if($retval==true){
			return true;
		}else{
			$this->close();
			throw new \Exception('刪除失敗');
		}
	}

	//添加 param是數組 [ key =>value ]
	public function insertInfo($param){
		$conn = $this->conn;
		$field = '';
		$val = '';
		foreach ($param as $key => $value) {
			$field .= "`$key`,";
			$val .= "'$value',";
		}
		$field = '( '.trim($field,',').' )';
		$val = '( '.trim($val,',').' )';
		$sql = "INSERT INTO `$this->tbl` $field VALUES $val";
		// var_dump($sql);die;
		if($conn->query($sql)==true){
			$insert_id = $conn->insert_id;

			return $insert_id;
		}else{
			$error = $conn->error;
			$this->close();
			throw new \Exception("插入數據失敗: " . $error);
		}
	}

	  /**
     * [insertInfos 添加多條數據]
     * @param  [type] $columns   [字段名 一維數組]
     * @param  [type] $postarray [添加的數據 二維數組]
     * @return [type]            [description]
     */
	public function insertInfos($columns,$postarray){
		// var_dump($arr);die;

		$conn = $this->conn;
		$sql = 'INSERT INTO ' . $this->tbl . ' ( ';

		foreach ( $columns as $colname ) {
			$sql = $sql . $colname . ',';
		}

		$sql = substr ( $sql, 0, - 1 ) . ' ) values ';
		foreach ($postarray as $arr) {
			$sql = $sql . ' ( ';
			foreach ( $columns as $colname ) {
				$sql = $sql . "'" . $arr[$colname] . "',";
			}
			$sql = substr ( $sql, 0, - 1 ) . ' ),';
		}
		$sql =  substr ( $sql, 0, - 1 );


		// var_dump($sql);die;
		if($conn->query($sql)==true){
			// var_dump($conn);die;
			// $insert_id = $conn->insert_id;

			return true;
		}else{
			$this->close();
			throw new \Exception("插入數據失敗: " . $conn->error);
		}
	}

	//自由sql 插入修改操作
	public function excel($sql){
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if($retval==true){
			return true;
		}else{
			$this->close();
			throw new \Exception('操作失敗 '.$conn->error);
		}
	}

	// 查詢所有的表
	public function showTables(){
		$conn = $this->conn;
		$result = [];
		$sql = "SHOW TABLES";
		$retval = $conn->query($sql);
		if(!$retval){
			return false;
		}else{
			while ($row = $retval->fetch_row()) {
				array_push($result,$row[0]);
			}
		}
		return $result;
	}

	//查詢所有方法 (不限制條數)
	public function select($table, $field='*', $where='1=1', $order='id desc'){
		$sql = "select $field from $table where $where order by $order";
		// echo($sql);exit;
		$data = [];
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if($retval){
			if($retval->num_rows==0){
				$this->close();
				throw new \Exception('查不到任何數據');
			}
			while ($row = $retval->fetch_assoc()) {
				array_push($data,$row);
			}
			return $data;
		}else{
			$this->close();
			throw new \Exception('查不到任何數據');
		}
	}

	//查詢所有方法 (不報錯不限制條數)
	public function selectAll($table, $field='*', $where='1=1', $order='id desc'){
		$sql = "select $field from $table where $where order by $order";
		// echo($sql);exit;
		$data = [];
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if($retval){
			if($retval->num_rows==0){
				return [];
			}
			while ($row = $retval->fetch_assoc()) {
				array_push($data,$row);
			}
			return $data;
		}else{
			return [];
		}
	}

	//查詢所有方法 (不報錯不限制條數) ---測試專用
	public function selectAlls($table, $field='*', $where='1=1', $order='id desc'){
		$sql = "select $field from $table where $where order by $order";
		// echo($sql);exit;
		$data = [];
		$conn = $this->conn;
		$retval = $conn->query($sql);
		if($retval){
			if($retval->num_rows==0){
				return [];
			}
			while ($row = $retval->fetch_assoc()) {
				array_push($data,$row);
			}
			return $data;
		}else{
			return [];
		}
	}

	function __destruct(){
		# 當業務結束時,關閉實例化的數據連接
		$conn = $this->conn;
		if($conn){
			$conn->close();
		}
	}
}
發佈了32 篇原創文章 · 獲贊 27 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章