php数据库操作model类(使用__call方法)


Posted in PHP onNovember 16, 2016

本文实例讲述了php数据库操作model类。分享给大家供大家参考,具体如下:

该数据库操作类使用__call()方法实现了数据的查找功能。

代码如下:

<?php
/*
作者 : shyhero
*/
define("HOSTNAME","127.0.0.1");
define("USERNAME","root");
define("PASSWORD","");
define("DATANAME","class");
class Model{
    private $link;
    private $tableName;
    private $zd;
    private $method = array(
      "where" => "",
      "order" => "",
      "limit" => "",
      "group" => "",
      "having" => ""
      );
    public function __construct($tableName){
      $this -> tableName = $tableName;
      try{
        $this -> link = mysqli_connect(HOSTNAME,USERNAME,PASSWORD,DATANAME);
        mysqli_set_charset($this -> link,"UTF8");
      }catch(Exception $e){
        echo "数据库连接失败";
      }
      $this -> desc();
    }
    public function __destruct(){
      mysqli_close($this -> link);
    }
    public function desc(){
      $sql = " desc {$this -> tableName}; ";
      $res = mysqli_query($this -> link,$sql);
      $arr = mysqli_fetch_all($res,MYSQLI_ASSOC);
      for($i = 0 ;$i < count($arr);$i++){
        $brr[] = $arr[$i]['Field'];
      }
      $this -> zd = $brr;
      return $brr;
    }
    public function __call($name,$value){
      $name = strtolower($name);
      if(array_key_exists($name,$this -> method)){
        if($name == 'order'){
          $this -> method['order'] = " order by ".$value[0];
        }elseif($name == 'group'){
        $this -> method['group'] = " group by ".$value[0];
        }else{
          $this -> method[$name] = " {$name} ".$value[0];
        }
      }else{
        return "the method is not found!";
      }
      return $this;
    }
    public function method(){
      return " {$this -> method['where']} {$this -> method['order']} {$this -> method['limit']} {$this -> method['group']} {$this -> method['having']}; ";
    }
    public function find($a="*"){
      if(in_array("{$a}",$this -> zd) || $a == "*"){
        $sql = "select {$a} from {$this -> tableName} {$this -> method()} ";
      }else{
        $sql = "select * from {$this -> tableName}";
      }
      //return $sql;
      $res = mysqli_query($this -> link,$sql);
      $arr = mysqli_fetch_all($res,MYSQLI_ASSOC);
      return $arr;
    }
}

用法示例:

<?php
  function __autoload($className){
    require($className.".class.php");
  }
  $a = new Model("stu");
  $a -> where("name = 'zhu'")->limit("5,10");
  var_dump($a -> find("name"));

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
thinkPHP自动验证机制详解
Dec 05 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
php中file_get_contents()函数用法实例
Feb 21 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 PHP
php实现的简单数据库操作Model类
Nov 16 #PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 #PHP
PHP中串行化用法示例
Nov 16 #PHP
PHP单态模式简单用法示例
Nov 16 #PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 #PHP
php实现当前页面点击下载文件的实例代码
Nov 16 #PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 #PHP
You might like
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP eval函数使用介绍
2013/12/08 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php按单词截取字符串的方法
2015/04/07 PHP
分享php分页的功能模块
2015/06/16 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
pytorch 预训练层的使用方法
2019/08/20 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
学校献爱心活动总结
2014/07/08 职场文书
职代会闭幕词
2015/01/28 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
golang中的空接口使用详解
2021/03/30 Python
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android
Fluentd搭建日志收集服务
2022/09/23 Servers