最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL数据库操作类(PHP实现,支持连贯操作)_MySQL

来源:动视网 责编:小采 时间:2020-11-09 20:18:01
文档

MySQL数据库操作类(PHP实现,支持连贯操作)_MySQL

MySQL数据库操作类(PHP实现,支持连贯操作)_MySQL:使用过ThinkPHP框架的同学可能会对于其中数据库模型操作特别有好感,ThinkPHP提供了数据库操作的简单的操作,对于连接数据库,数据库的增删改查等数据操作都非常的nice,同时支持连贯操作,对于那些不习惯写sql语句的同学真是大大的便利。(注:sql还是很
推荐度:
导读MySQL数据库操作类(PHP实现,支持连贯操作)_MySQL:使用过ThinkPHP框架的同学可能会对于其中数据库模型操作特别有好感,ThinkPHP提供了数据库操作的简单的操作,对于连接数据库,数据库的增删改查等数据操作都非常的nice,同时支持连贯操作,对于那些不习惯写sql语句的同学真是大大的便利。(注:sql还是很


使用过ThinkPHP框架的同学可能会对于其中数据库模型操作特别有好感,ThinkPHP提供了数据库操作的简单的操作,对于连接数据库,数据库的增删改查等数据操作都非常的nice,同时支持连贯操作,对于那些不习惯写sql语句的同学真是大大的便利。(注:sql还是很重要的,不要因为用了框架就把原先的忘了)。
而在笔者使用php操作redis实现后台任务的过程中,也想要借助这种便利,但无奈redis操作单独的类,直接访问其中的controller文件的话,总是会提示M方法失败,导致此模型方法不能使用。万般无奈之下,只能自己来实现一下了。
借助PHP的mysqli相关函数,进行MySQL数据库操作类的实现。此程序中提供数据库的操作包括:数据库的连接,数据库的选择,数据库用户的选择,相应数据库中所有数据表名的查看;数据表的操作包括:相应的数据表中字段全部属性的查看,数据表的增删改查操作,数据表查询、插入的连贯操作等

_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=0;$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=0;$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=0;$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 = 1;
 array_push($values,'('.implode(',',array_values($value)).')');
 array_push($fields,'('.implode(',',array_keys($value)).')');
 }else{ //一维数组
 $tip = 0;
 }
 }
 }else{
 return false;
 }
 if(!$tip){
 array_push($values,'('.implode(',',array_values($data)).')');
 array_push($fields,'('.implode(',',array_keys($data)).')');
 }
 $this->data['fields'] = $fields[0];
 $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);
 }
}

操作示例:
首先实例化此类,其中需要输入host(数据库地址)、user(数据库用户)、password(数据库用户密码)、database(数据库名称)此四种信息,进行数据库的连接,然后即可调用select_table()方法,其中传入数据表名,从而设置对指定表的操作,从而即可利用连贯操作进行相应数据的增删改查。 其中参数基本均支持字符串和数组两种形式。

include '/classes/db.php';
 $db = new \Database('localhost', 'root', '901230', '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 = '123';
 $param2 = 'id>1,record>100';
 $param3 = array(
 /*array('count'=>1,'openid'=>'123','record'=>'100'),
 array('count'=>2,'openid'=>'234','record'=>'200'),*/
 array('count' => 4, 'openid' => '456', 'record' => '500')
 );
 $param4 = array('count' => 4, 'openid' => '456', 'record' => '500');
 //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(2)->find());
 dump($db->options_handle($param1));
 dump($db->options_handle($param2));
 dump($db->options_handle($param3));
 $array = array('id', 'count');

 $num = '123';
 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' => 1
 );
 $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

MySQL数据库操作类(PHP实现,支持连贯操作)_MySQL:使用过ThinkPHP框架的同学可能会对于其中数据库模型操作特别有好感,ThinkPHP提供了数据库操作的简单的操作,对于连接数据库,数据库的增删改查等数据操作都非常的nice,同时支持连贯操作,对于那些不习惯写sql语句的同学真是大大的便利。(注:sql还是很
推荐度:
标签: 操作 php 数据库
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top