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 相关文章推荐
改进的IP计数器
Oct 09 PHP
杏林同学录(四)
Oct 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
PHP6 先修班 JSON实例代码
Aug 23 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
hessian 在PHP中的使用介绍
Dec 13 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 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
PHP的面向对象编程
2006/10/09 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
javascript 写类方式之七
2009/07/05 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
原生js和jquery实现图片轮播特效
2015/04/23 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
Python生成器(Generator)详解
2015/04/13 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
详解Python3的TFTP文件传输
2018/06/26 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python交换两个变量的值方法
2019/01/12 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
精伦电子Java笔试题
2013/01/16 面试题
金蝶的一道SQL笔试题
2012/12/18 面试题
财务会计专业推荐信
2013/11/30 职场文书
女子职高个人自荐书
2014/02/01 职场文书
工商管理本科生求职信
2014/07/13 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers