这篇文章给大家分享的是有关PHP如何封装类似thinkphp连贯操作数据库Db类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
具体如下:
<?php
header("Content-Type:text/html;charset=utf-8");
/**
*php操作mysql的工具类
*/
class Db{
private $_db = null;//数据库连接句柄
private $_table = null;//表名
private $_where = null;//where条件
private $_order = null;//order排序
private $_limit = null;//limit限定查询
private $_group = null;//group分组
private $_configs = array(
'hostname' => 'localhost',
'dbname' => 'test',
'username' => 'root',
'password' => '1234'
);//数据库配置
/**
* 构造函数,连接数据库
*/
public function __construct(){
$link = $this->_db;
if(!$link){
$db = mysqli_connect($this->_configs['hostname'],$this->_configs['username'],$this->_configs['password'],$this->_configs['dbname']);
mysqli_query($db,"set names utf8");
if(!$db){
$this->ShowException("错误信息".mysqli_connect_error());
}
$this->_db = $db;
}
}
/**
* 获取所有数据
*
* @param <type> $table The table
*
* @return boolean All.
*/
public function getAll($table=null){
$link = $this->_db;
if(!$link)return false;
$sql = "SELECT * FROM {$table}";
$data = mysqli_fetch_all($this->execute($sql));
return $data;
}
public function table($table){
$this->_table = $table;
return $this;
}
/**
* 实现查询操作
*
* @param string $fields The fields
*
* @return boolean ( description_of_the_return_value )
*/
public function select($fields="*"){
$fieldsStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_array($fields)){
$fieldsStr = implode(',', $fields);
}elseif(is_string($fields)&&!empty($fields)){
$fieldsStr = $fields;
}
$sql = "SELECT {$fields} FROM {$this->_table} {$this->_where} {$this->_order} {$this->_limit}";
$data = mysqli_fetch_all($this->execute($sql));
return $data;
}
/**
* order排序
*
* @param string $order The order
*
* @return boolean ( description_of_the_return_value )
*/
public function order($order=''){
$orderStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_string($order)&&!empty($order)){
$orderStr = "ORDER BY ".$order;
}
$this->_order = $orderStr;
return $this;
}
/**
* where条件
*
* @param string $where The where
*
* @return <type> ( description_of_the_return_value )
*/
public function where($where=''){
$whereStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_array($where)){
foreach ($where as $key => $value) {
if($value == end($where)){
$whereStr .= "`".$key."` = '".$value."'";
}else{
$whereStr .= "`".$key."` = '".$value."' AND ";
}
}
$whereStr = "WHERE ".$whereStr;
}elseif(is_string($where)&&!empty($where)){
$whereStr = "WHERE ".$where;
}
$this->_where = $whereStr;
return $this;
}
/**
* group分组
*
* @param string $group The group
*
* @return boolean ( description_of_the_return_value )
*/
public function group($group=''){
$groupStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_array($group)){
$groupStr = "GROUP BY ".implode(',',$group);
}elseif(is_string($group)&&!empty($group)){
$groupStr = "GROUP BY ".$group;
}
$this->_group = $groupStr;
return $this;
}
/**
* limit限定查询
*
* @param string $limit The limit
*
* @return <type> ( description_of_the_return_value )
*/
public function limit($limit=''){
$limitStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_string($limit)||!empty($limit)){
$limitStr = "LIMIT ".$limit;
}elseif(is_numeric($limit)){
$limitStr = "LIMIT ".$limit;
}
$this->_limit = $limitStr;
return $this;
}
/**
* 执行sql语句
*
* @param <type> $sql The sql
*
* @return boolean ( description_of_the_return_value )
*/
public function execute($sql=null){
$link = $this->_db;
if(!$link)return false;
$res = mysqli_query($this->_db,$sql);
if(!$res){
$errors = mysqli_error_list($this->_db);
$this->ShowException("报错啦!<br/>错误号:".$errors[0]['errno']."<br/>SQL错误状态:".$errors[0]['sqlstate']."<br/>错误信息:".$errors[0]['error']);
die();
}
return $res;
}
/**
* 插入数据
*
* @param <type> $data The data
*
* @return boolean ( description_of_the_return_value )
*/
public function insert($data){
$link = $this->_db;
if(!$link)return false;
if(is_array($data)){
$keys = '';
$values = '';
foreach ($data as $key => $value) {
$keys .= "`".$key."`,";
$values .= "'".$value."',";
}
$keys = rtrim($keys,',');
$values = rtrim($values,',');
}
$sql = "INSERT INTO `{$this->_table}`({$keys}) VALUES({$values})";
mysqli_query($this->_db,$sql);
$insertId = mysqli_insert_id($this->_db);
return $insertId;
}
/**
* 更新数据
*
* @param <type> $data The data
*
* @return <type> ( description_of_the_return_value )
*/
public function update($data){
$link = $this->_db;
if(!$link)return $link;
if(is_array($data)){
$dataStr = '';
foreach ($data as $key => $value) {
$dataStr .= "`".$key."`='".$value."',";
}
$dataStr = rtrim($dataStr,',');
}
$sql = "UPDATE `{$this->_table}` SET {$dataStr} {$this->_where} {$this->_order} {$this->_limit}";
$res = $this->execute($sql);
return $res;
}
/**
* 删除数据
*
* @return <type> ( description_of_the_return_value )
*/
public function delete(){
$link = $this->_db;
if(!$link)return $link;
$sql = "DELETE FROM `{$this->_table}` {$this->_where}";
$res = $this->execute($sql);
return $res;
}
/**
* 异常信息输出
*
* @param <type> $var The variable
*/
private function ShowException($var){
if(is_bool($var)){
var_dump($var);
}else if(is_null($var)){
var_dump(NULL);
}else{
echo "<pre style='position:relative;z-index:1000;padding:10px;border-radius:5px;background:#F5F5F5;border:1px solid #aaa;font-size:14px;line-height:18px;opacity:0.9;'>".print_r($var,true)."</pre>";
}
}
}
$db = new Db();
//查询操作
var_dump($db->table('user')->where('id > 2')->order('id desc')->limit('2,4')->select());
//插入操作
var_dump($db->table('user')->insert(array('username'=>'user','password'=>'pwd')));
//更新操作
var_dump($db->table('user')->where('id = 1')->update(array('username'=>'user1','password'=>'pwd1')));
//删除操作
var_dump($db->table('user')->where('id = 1')->delete());
感谢各位的阅读!关于“PHP如何封装类似thinkphp连贯操作数据库Db类”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。