自己动手做一个SQL解释器

2016-01-29 14:42 23 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 *(,?.*=.*)

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

延伸阅读
标签: 面食 面条
自己动手做面包怎么做最好吃怎么做自己动手做面包好吃 酸奶蜜餐包 很喜欢这款酸奶蜜餐包,当早餐吃,夹火腿、培根、奶酪、果酱、牛油果统统好吃,哪怕只是用餐包配杯热奶都很不错。 材料 高筋面粉300克、酸奶60克、蜂蜜40克、牛奶150-170克、盐5克、干酵母6克 做法 1、所有材料拌匀揉至能拉出薄膜,放温暖湿润处发酵至2倍大...
自己动手做豆腐 1. 这是我做豆腐的宝贝,豆浆机是有过滤网的那种,过滤很彻底,用了十多年了,质量杠杠的。 2. 用豆浆机榨豆浆,榨好后放入容器中,这个温度就可以点内酯了,内酯提前用少许水化开,倒入后迅速搅拌,然后盖...
标签: 面包粉 面包
免揉Challah面包 1.将所有的面团配料放大盆里,搅一搅,搅到所有材料混合好。 2.放搅拌机里,用高速搅1分钟。这时面团会比较光滑。 3.面团放发面桶里,放室温发2小时左右。 这时面团有点发,但发得不太多。 4.把发面桶放冰箱里(冷藏室)至少7小时以上,最多可以放4天。(这次我放了18小时左右) 5.这时面团应该发到原面团的...
标签: 创意手工
每一个人都应该拥有这么一个mini花园,在这个玻璃瓶中还能为自然留一片纯净的天地Nicole Balch很用心的为我们献上她的小花园,除了固定用的石头外,还加入了黄铁矿和玛瑙用来装饰,这个小小桃源真令人向往。
自己动手做凉皮 1.和面。我用了1/3可乐瓶子的面。不费吹灰之力和好后,盖块湿屉布让面块醒一会儿~~大概十来分钟后,揉匀,就得到一块光滑的大面团啦~~好像一个大馒头啊~ 2.洗面。把面团放水里(到面团高1/2处即可),然后开始不停的揉搓面团,这个可是力气活呀~~待水呈牛奶状时倒出至另一容器,面团中重新加入水,继续揉。。。大概八九回...

经验教程

367

收藏

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