MySQL数据库操作类(PHP实现,支持连贯操作)
<?php
/**
* Author: suvan
* CreateTime: 2018/2/27
* description: 数据库操作类(仅对接MySQL数据库,主要利用MySQLi函数)
*/
class Database{ //MySQL主机地址
private $_host;
//MySQL用户名
private $_user;
//MySQL用户密码
private $_password;
//指定数据库名称
private $_database;
//MySQL数据库端口号
private $_port;
private $_socket;
//当前数据库对象
private $_dbObj;
//数据库表
private $_table;
//数据库表对象
private $_tableObj;
// 最近错误信息
protected $error = '';
// 数据信息
protected $data = array();
// 查询表达式参数
protected $options = array();
protected $_validate = array(); // 自动验证定义
protected $_auto = array(); // 自动完成定义
protected $_map = array(); // 字段映射定义
protected $_scope = array(); // 命名范围定义
// 链操作方法列表
protected $methods = array('strict','order','alias','having','group','lock','distinct','auto','filter','validate','result','token','index','force'); /**
* Database类初始化函数
* 取得DB类的实例对象 字段检查
* @access public
* @param string $host MySQL数据库主机名
* @param string $user MySQL数据库用户名
* @param string $password MySQL数据库密码
* @param string $database 指定操作的数据库
* @return mixed 数据库连接信息、错误信息
*/
public function __construct($host,$user,$passowrd,$database,$port=){
$this->_initialize();
if(!isset($host)||!isset($user)||!isset($passowrd)||!isset($database)){
return false;
}else{
$this->_host = $host;
$this->_user = $user;
$this->_password = $passowrd;
$this->_database = $database;
$this->_port = $port;
$_dbObj = new mysqli($host,$user,$passowrd,$database,$port);
if($_dbObj->connect_errno){
$this->error = $_dbObj->connect_error;
return false;
}else{
$this->_dbObj = $_dbObj;
return $this;
}
}
}
/**
* 错误信息函数
* 返回数据库操作过程中最后一次执行时的错误信息
* @access public
* @return mixed 数据库连接错误信息(正常返回'')
*/
public function error(){
return $this->error;
}
// 回调方法 初始化模型
protected function _initialize() {}
/**
* 设置数据对象的值
* @access public
* @param string $name 名称
* @param mixed $value 值
* @return void
*/
public function __set($name,$value) {
// 设置数据对象属性
$this->data[$name] = $value;
} /**
* 获取数据对象的值
* @access public
* @param string $name 名称
* @return mixed
*/
public function __get($name) {
return isset($this->data[$name])?$this->data[$name]:null;
} /**
* 检测数据对象的值
* @access public
* @param string $name 名称
* @return boolean
*/
public function __isset($name) {
return isset($this->data[$name]);
} /**
* 销毁数据对象的值
* @access public
* @param string $name 名称
* @return void
*/
public function __unset($name) {
unset($this->data[$name]);
}
/**
* 利用__call方法实现一些特殊的方法(对于调用类中不存在方法的解决方案)
* @access public
* @param string $method 方法名称
* @param array $args 调用参数
* @return mixed
*/
public function __call($method,$args) {
/*if(in_array(strtolower($method),$this->methods,true)) {
// 连贯操作的实现
$this->options[strtolower($method)] = $args[0];
return $this;
}elseif(in_array(strtolower($method),array('count','sum','min','max','avg'),true)){
// 统计查询的实现
$field = isset($args[0])?$args[0]:'*';
return ;
}elseif(strtolower(substr($method,0,5))=='getby') {
// 根据某个字段获取记录
$field = parse_name(substr($method,5));
$where[$field] = $args[0];
return ;
}elseif(strtolower(substr($method,0,10))=='getfieldby') {
// 根据某个字段获取记录的某个值
$name = parse_name(substr($method,10));
$where[$name] =$args[0];
return ;
}elseif(isset($this->_scope[$method])){// 命名范围的单独调用支持
return ;
}else{ }*/
}
/*
* 选择数据库
* @access public
* @param string $database 选择的数据库名称
* @return mixed 数据库连接信息
* */
public function select_db($database){
$select_db = mysqli_select_db($this->_dbObj,$database);
if($select_db){
$this->_database = $database;
$_dbObj = new mysqli($this->_host,$this->_user,$this->_password,$database,$this->_port);
$this->_dbObj = $_dbObj;
return $this;
}else{
$this->error = mysqli_error($this->_dbObj);
return false;
}
}
/*
* 数据库用户更换
* @access public
* @param string $user 数据库用户名称
* @param string $password 数据库用户密码
* @return mixed 数据库连接信息
* */
public function change_user($user,$password){
$change_user = mysqli_change_user($this->_dbObj,$user,$password,$this->_database);
if($change_user){
$this->_user = $user;
$this->_password = $password;
$_dbObj = new mysqli($this->_host,$this->_user,$this->_password,$this->_database,$this->_port);
$this->_dbObj = $_dbObj;
return $this;
}else{
$this->error = mysqli_error($this->_dbObj);
return false;
}
}
/*
* 查询数据库中所有的表名
* @access public
* @return array 数据表的数量和表名
* */
public function tables(){
$sql = 'show tables';
$search_res = mysqli_query($this->_dbObj,$sql);
if($search_res){
$num_rows = $search_res->num_rows;
$tables_msg = array(
'count'=>$num_rows,
'tables'=>array()
);
for($i=;$i<$num_rows;$i++){
$row = $search_res->fetch_assoc();
$key = 'Tables_in_'.$this->_database;
array_push($tables_msg['tables'],$row[$key]);
}
mysqli_free_result($search_res);
return $tables_msg;
}else{
mysqli_free_result($search_res);
return false;
}
}
/*
* 获取指定表中所有信息
* @access public
* @param string $table 数据表名称
* @return array 数据表的详细信息
* */
public function select_table($table){
$sql = 'select * from '.$table;
$search_res = mysqli_query($this->_dbObj,$sql);
if($search_res){
$this->_table = $table;
$table_msg = self::query_handle($search_res);
$this->_tableObj = $table_msg;
mysqli_free_result($search_res);
return $table_msg;
}else{
mysqli_free_result($search_res);
return false;
}
}
/*
* 获取指定表的字段详细信息
* @access public
* @param string $table 数据表名称
* @return array 数据表的字段详细信息
* */
public function select_table_fields($table){
$sql = 'show fields from '.$table;
$search_res = mysqli_query($this->_dbObj,$sql);
if($search_res){
$this->_table = $table;
$fields_msg = self::query_handle($search_res);
mysqli_free_result($search_res);
return $fields_msg;
}else{
mysqli_free_result($search_res);
return false;
}
}
/*
* 获取数据表中指定字段信息(允许多字段同时查询)
* @access public
* @param mixed $field 指定字段(字符串传入使用,间隔)
* @return array 数据表中指定字段信息
* */
public function getField($field){
$fields = self::param_handle($field);
$count = count($fields);
for($i=;$i<$count;$i++){
$index = $fields[$i];
$sql = 'select '.$index.' from '.$this->_table;
$res = mysqli_query($this->_dbObj,$sql);
$field_msg[$index] = self::query_handle($res);
}
return $field_msg;
}
/*
* mysqli_query函数结果处理函数
* @access protected
* @param object $obj mysqli_query函数结果
* @return array 数据表中指定字段信息
* */
protected function query_handle($obj){
$res = array();
for($i=;$i<$obj->num_rows;$i++){
$row = $obj->fetch_assoc();
array_push($res,$row);
}
return $res;
}
/*
* 传入参数处理函数
* @access protected
* @param mixed $param 传入参数
* @return array 处理后数组数据
* */
public function param_handle($param){
if(is_string($param)&&!empty($param)){
$params = explode(',',$param);
}elseif(is_array($param)&&!empty($param)){
$params = $param;
}else{
return false;
}
return $params;
}
/*
* 查询表达式参数处理函数
* @access protected
* @param mixed $param 传入参数(where limit order)
* @return string 处理后字符串数据
* */
public function options_handle($param){
if(is_numeric($param)){
$option = $param;
}elseif(is_string($param)&&!empty($param)&&!is_numeric($param)){
$params = explode(',',$param);
$count = count($params);
$option = implode(' and ',$params);
}elseif(is_array($param)&&!empty($param)){
$params = $param;
$count = count($params);
$arr = array();
foreach($param as $key=>$value){
$tip = "$key=$value ";
array_push($arr,$tip);
}
$option = implode(' and ',$arr);
}else{
return false;
}
return $option;
}
/*
* 查询表达式$options处理函数
* @access protected
* @return string 处理后字符串数据
* */
protected function option(){
$options = $this->options;
$option = '';
if(isset($options['where'])){
$option .= 'where '.$options['where'].' ';
}
if(isset($options['order'])){
$option .= 'order by '.$options['order'].' '.$options['order_type'].' ';
}
if(isset($options['limit'])){
$option .= 'limit '.$options['limit'];
}
return $option;
}
/*
* 根据查询表达式查询数据(符合条件的所有记录)
* @access public
* @return array 满足查询表达式的特定数据
* */
public function find(){
$option = self::option();
$sql = 'select * from '.$this->_table.' '.$option;
$search_res = mysqli_query($this->_dbObj,$sql);
$msg = self::query_handle($search_res);
return $msg;
}
/*
* 查询表达式 where处理函数
* @access public
* @param mixed $where where查询条件
* @return object $this
* */
public function where($where){
$this->options['where'] = self::options_handle($where);
return $this;
}
/*
* 查询表达式 limit处理函数
* @access public
* @param mixed $limit limit查询条件(数字)
* @return object $this
* */
public function limit($limit){
$this->options['limit'] = self::options_handle($limit);
return $this;
}
/*
* 查询表达式 order处理函数
* @access public
* @param string $order order查询条件
* @param string $type order查询条件的顺序(默认降序)
* @return object $this
* */
public function order($order,$type='desc'){
$this->options['order'] = $order;
$this->options['order_type'] = $type;
return $this;
}
/*
* 数据处理函数(最多处理二维数据)
* @access public
* @param array $data 需要插入的数据
* @return object $this
* */
public function data(array $data){
$values = array();
$fields = array();
if(is_array($data)){
foreach($data as $key=>$value){
if(is_array($value)){ //二维数组
$tip = ;
array_push($values,'('.implode(',',array_values($value)).')');
array_push($fields,'('.implode(',',array_keys($value)).')');
}else{ //一维数组
$tip = ;
}
}
}else{
return false;
}
if(!$tip){
array_push($values,'('.implode(',',array_values($data)).')');
array_push($fields,'('.implode(',',array_keys($data)).')');
}
$this->data['fields'] = $fields[];
$this->data['values'] = implode(',',$values);
return $this;
}
/*
* 数据新增函数
* @access public
* @return mixed 数据库新增信息
* */
public function add(){
$fields = $this->data['fields'];
$values = $this->data['values'];
$sql = 'INSERT INTO '.$this->_table.$fields.'VALUES'.$values;
$res = mysqli_query($this->_dbObj,$sql);
return $res;
}
/*
* 数据更新函数(一维数组)
* @access public
* @param array $data 需要更新的数据
* @return mixed 数据库新增信息
* */
function save(array $data){
$tip = array();
if(is_array($data)){
foreach($data as $key=>$value){
array_push($tip,"$key=$value");
}
}else{
return false;
}
$set_msg = implode(',',$tip);
$sql = 'UPDATE '.$this->_table.' SET '.$set_msg.' WHERE '.$this->options['where'];
$res = mysqli_query($this->_dbObj,$sql);
return $res;
}
/*
* 数据删除函数
* @access public
* @return mixed 数据库删除信息
* */
public function delete(){
$sql = 'DELETE FROM '.$this->_table.' WHERE '.$this->options['where'];
$res = mysqli_query($this->_dbObj,$sql);
return $res;
}
/*
* SQL语句查询
* */
public function query($sql){
$search_res = mysqli_query($this->_dbObj,$sql);
return $search_res;
}
/*
* mysql中查询语句
* */
protected function sql(){
/*
* 基本SQL语句
* 插入数据:INSERT INTO tb_name(id,name,score)VALUES(NULL,'张三',140),(NULL,'张四',178),(NULL,'张五',134);
* 更新语句:UPDATE tb_name SET score=189 WHERE id=2;
* 删除数据:DELETE FROM tb_name WHERE id=3;
* WHERE语句:SELECT * FROM tb_name WHERE id=3;
* HAVING 语句:SELECT * FROM tb_name GROUP BY score HAVING count(*)>2
* 相关条件控制符:=、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT AND 、OR Linke()用法中 % 为匹配任意、 _ 匹配一个字符(可以是汉字)IS NULL 空值检测
* MySQL的正则表达式:SELECT * FROM tb_name WHERE name REGEXP '^[A-D]' //找出以A-D 为开头的name
* */
}
/*
* 关闭连接
* */
public function close(){
$close = mysqli_close($this->_dbObj);
if($close){
return true;
}else{
return false;
}
}
function __destruct(){
mysqli_close($this->_dbObj);
}
}
使用示例
include '/classes/db.php';
$db = new \Database('localhost', 'root', '', 'weixin');
//$db = new \mysqli('localhost','root','901230','weixin');
//$db->select_db('visitor');
//dump($db->error());
//$db->change_user('helen','901230');
$table = 'zyd_fuweng_user';
//dump($db->select_table_fields($table));
//dump($db->error());
$db->select_table($table);
$param1 = '';
$param2 = 'id>1,record>100';
$param3 = array(
/*array('count'=>1,'openid'=>'123','record'=>'100'),
array('count'=>2,'openid'=>'234','record'=>'200'),*/
array('count' => , 'openid' => '', 'record' => '')
);
$param4 = array('count' => , 'openid' => '', 'record' => '');
//dump($db->where('id=4')->save($param4));
dump($db->where('count=4')->delete()); die;
dump($db->data($param3)->add());
dump(array_keys($param3));
dump(array_values($param3));
dump(implode(',', array_values($param3)));
dump(implode(',', array_keys($param3))); dump($db->where($param2)->order('id')->limit()->find());
dump($db->options_handle($param1));
dump($db->options_handle($param2));
dump($db->options_handle($param3));
$array = array('id', 'count'); $num = '';
if (is_string($num)) {
echo 'true';
} dump($db->getField($array));
dump($db->select_table_fields($table));
/*$array = array('a','b');
$array1 = array();
dump($db->getField('a,b'));
dump($db->getField($array));
dump($db->getField($array1));
dump($db->getField(''));*/
/*$str = '';
if(empty($str)){
echo 'true';
}*/
/*$model = M('zyd_fuweng_user');
$res = $model->getField('create_time,count');
dump($res);*/
die;
//
$table = 'zyd_fuweng_user';
//选择指定的数据库,并返回其中全部信息
$table_msg = $db->select_table($table);
//选择指定数据库,返回数据库的字段信息
$table_field_msg = $db->select_table_fields($table);
//条件搜索,传入条件均为数据
$where = array(
'id' =>
);
$data = array(
'headimgurl' => 'helen.jpg'
);
dump($db->where($where)->field('field'));
dump($table); /*$dbObj = new \mysqli('localhost','helen','901230','weixin','3306');
//$query = 'select * from zyd_fuweng_user';
$query = 'show fields from zyd_fuweng_user';
$tables = mysqli_query($dbObj,$query);
//dump($tables);
$count = $tables->num_rows;
$arr = array();
for($i=0;$i<$count;$i++){
$row = $tables->fetch_assoc();
//dump($row);
array_push($arr,$row);
}
mysqli_free_result($tables);
dump($arr);
die;
$query1 = 'select * from zyd_fuweng_user';
$table_msg = mysqli_query($dbObj,$query1);
//输出查询结果
$num = $table_msg->num_rows;
for($i=0;$i<$num;$i++){
$row = $table_msg->fetch_assoc();
dump($row);
}
dump($dbObj);
dump($tables);
dump($table_msg);
$res = mysqli_close($dbObj);
dump($res);*/
MySQL数据库操作类(PHP实现,支持连贯操作)的更多相关文章
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...
- C#访问MySQL数据库帮助类
MySQL数据库访问帮助类 1.项目添加引用官方MySQL动态库MySql.Data.dll 下载地址:MySql.Data.dll(也可以到官网下载动态库)项目添加引用 这里有一个Mysql帮助类的 ...
- PHP - Mysql数据库备份类
使用方法: require_once("backdata.class.php"); $link =@mysql_connect("localhost",&quo ...
- mysql数据库delete数据时不支持表别名!!!
mysql数据库delete数据时不支持表别名!!! mysql delete时候 提示语法错误!如下sql: 去掉 表别名的时候: 正确的写法例如: DELETE FROM COMMENTS_REP ...
- JAVA文件操作类和文件夹的操作代码示例
JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...
- Mysql数据库的二进制安装和基础入门操作
前言:Mysql数据库,知识非常的多,要想学精学通这块知识,估计也要花费和学linux一样的精力和时间.小编也是只会些毛皮,给大家分享一下~ 一.MySQL安装 (1)安装方式: 1 .程序包yum安 ...
- MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系
数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...
- 使用T4模板生成MySql数据库实体类
注:本文系作者原创,但可随意转载. 现在呆的公司使用的数据库几乎都是MySQL.编程方式DatabaseFirst.即先写数据库设计,表设计按照规范好的文档写进EXCEL里,然后用公司的宏,生成建表脚 ...
- mysql数据库delete数据时不支持表别名
今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELETE FROM LEAD_SYSTEM_MENU_ORG_REF as t WHERE t.resourceid='4 ...
随机推荐
- 小白——java基础之数据类型
PS:此文章为小白提供,大佬请绕道!!!! 首先特别感谢大才哥给我提供这个平台,未来我希望把java这个版块的内容补全. 今天要讲的是数据类型,最最最基础的内容~ java标识符.数据类型.关键字 开 ...
- Dshell----开源攻击分析框架
前言 随着互联网的高速发展,网络安全问题变得至关重要,随着网络的不断规模化和复杂化,网络中拒绝服务(Denial of Service,DoS)攻击和分布式拒绝服务(Distributed Denia ...
- JavaScript设计模式(8)-装饰者模式
装饰者模式 1. 作用: 可用来透明地把对象包装在具有同样接口的另一对象之中,这样可以给一个方法添加一些行为,然后将方法调用传递给原始对象. 可用于为对象增加功能,用来代替大量子类. 装饰者对其组件进 ...
- C#图解教程 第七章 类和继承
类和继承 类继承访问继承的成员所有类都派生自object类屏蔽基类的成员基类访问使用基类的引用 虚方法和覆写方法覆写标记为override的方法覆盖其他成员类型 构造函数的执行 构造函数初始化语句类访 ...
- java线程安全问题以及使用synchronized解决线程安全问题的几种方式
一.线程安全问题 1.产生原因 我们使用java多线程的时候,最让我们头疼的莫过于多线程引起的线程安全问题,那么线程安全问题到底是如何产生的呢?究其本质,是因为多条线程操作同一数据的过程中,破坏了数据 ...
- 【Luogu3806】点分治(点分治)
[Luogu3806]点分治(点分治) 题面 题目描述 给定一棵有n个点的树 询问树上距离为k的点对是否存在. 输入格式: n,m 接下来n-1条边a,b,c描述a到b有一条长度为c的路径 接下来m行 ...
- CTSC 选课
题面(有删减) 题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门 ...
- haproxy实现会话保持(1):cookie
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- mysql5.6版本备份报错
MySQL5.6版本备份报错,密码不安全 [root@centos199 mysql]# mysqldump -uroot -ppassword cz-office > mysql38.sqlW ...
- 使用Python从Workflowy同步大纲到印象笔记
title: 从Workflowy到印象笔记 toc: true comment: true date: 2018-03-17 10:05:54 tags: ["Python", ...