<?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();
}
}
}
PHP操作數據庫封裝類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.