自己动手做一个SQL解释器

2016-01-29 14:42 26 1 收藏

自己动手做一个SQL解释器,自己动手做一个SQL解释器

【 tulaoshi.com - PHP 】

  自己动手做一个SQL解释器
在一些小型的应用中,完全没有必要使用大型数据库软件。自己做一个SQL解释器就能用数据库的方式来管理了。
这个解释器,能解释常用的SQL命令。你可以自行添加其他功能。

<?php
class DB_text {
  var $conn;
  var $classname = "db_text";
  var $database;
  function on_create() {
  }
  function connect($database_name) {
    $this-database = $database_name;
    if(! file_exists($database_name)) {
      $this-conn = array();
      $this-_close();
    }
    $fp = fopen($this-database,"r");
    $this-conn = unserialize(fread($fp,filesize($this-database)));
    fclose($fp);
  }
  function &query($query) {
    if(eregi("select ",$query)) return $this-_select($query);
    if(eregi("insert ",$query)) return $this-_insert($query);
    if(eregi("delete ",$query)) return $this-_delete($query);
    if(eregi("update ",$query)) return $this-_update($query);
    return array();
  }
  function fetch_row(&$result) {
    if(list($key,$value) = each($result))
      return $value;
    return false;
  }
  function num_rows($result) {
    return count($result);
  }

  /**
   * query的辅助函数
   */
  function _select($query) {
    if(eregi("(order by (.+))",$query,$regs)) {
      $order = $regs[2];
      $query = eregi_replace($regs[1],"",$query);
    }
    if(eregi("(group by (.+))",$query,$regs)) {
      $group = $regs[2];
      $query = eregi_replace($regs[1],"",$query);
    }
    eregi("select .* from ([0-9a-z_]+) *(where +(.+))?",$query,$regs);
    if($regs[3] != "") {
      $keys = $this-_where($regs[3],"$this-conn[$regs[1]]");
      while(list($key,$value) = each($keys)) {
        $rs[] = $this-conn[$regs[1]][$value];
      }
    }else {
      $rs = $this-conn[$regs[1]];
    }
    if($order) {
      sscanf($order,"%s %s",$key,$type);
      if(empty($type)) $type = "asc";
        $this-_sort($rs,$key,$type);
    }
    return $rs;
  }
  function _insert($query) {
    eregi("insert +into +([0-9a-z_]+) *(.+) *values? *(.+)",$query,$regs);
    eval("$key=array$regs[2];");
    eval("$value=array$regs[3];");
    for($i=0;$i<count($key);$i++)
      $rs[$key[$i]] = $value[$i];
    $this-conn[$regs[1]][] = $rs;
    $this-_close();
  }
  function _update($query) {
    eregi("update +([0-9a-z_]+) +set *(,?.*=.*)

来源:http://www.tulaoshi.com/n/20160129/1493994.html

延伸阅读
标签: DIY小饰品
用各式玩具恐龙制作而成的蜡烛烛台,就像是在开恐龙party一样,很有趣。给恐龙涂上了不同的颜色,看起来很可爱,不再是凶恶的样子。如果你也喜欢这个恐龙蜡烛的话,就来看看下面的教程吧! 第一步:准备好恐龙玩具、丙烯颜料、画笔、刻刀。 第二步:在恐龙的背后挖空...
标签: 电脑入门
    [Kker Group] By Pczz {urtf1ansiansicpg936deff0deflang1033deflangfe2052{fonttbl{f0fnilfprq2fcharset0 zipper;}{f1fmodernfprq6fcharset134 'cb'ce'cc'e5;}} viewkind4uc1pardlang2052f0fs72 kkerf1fs20par } 比如这段代码 呵呵 有人说这要先看懂这种语言~~ 如果你要这么...
标签: 创意手工
每一个人都应该拥有这么一个mini花园,在这个玻璃瓶中还能为自然留一片纯净的天地Nicole Balch很用心的为我们献上她的小花园,除了固定用的石头外,还加入了黄铁矿和玛瑙用来装饰,这个小小桃源真令人向往。
经常看到一写关于DNN的网站上有相应的语言包下载。通过下载语言包并安装可以可以起到对DNN应用程序本地化的效果(我们通常叫汉化)。在看了一段时间的程序后我发现自己动手做语言包也不是很难。只要你英语过关就完全可以自己动手通过DNN程序制作语言包,而不需借助其他任何工具。自己动手制作语言包步骤:1、首先以Host身份登录,进入主机管理-...
今天这个粘土项链可不是你家楼下小孩儿撒尿搓泥的泥巴,而是小孩儿玩的塑形粘土。偶尔玩玩粘土才发现现在的自己和孩子时候的比起来想象力已经极端匮乏了,趁着想象力还依附的时候做点东西吧,就当是抛弃天真善良,拥抱两面三刀虚伪空洞的里程碑吧。 这条粘土项链不仅可以当项链戴,还可以作为小饰品,挂起来喔!...

经验教程

879

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部