自己动手做一个SQL解释器

ztt喵喵范儿

ztt喵喵范儿

2016-01-29 14:42

自己动手做一个SQL解释器,自己动手做一个SQL解释器
  自己动手做一个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 *(,?.*=.*)
展开更多 50%)
分享

猜你喜欢

自己动手做一个SQL解释器

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

“HELLO”字符画 自己动手做一个墙面装饰画

手工创意 diy手工 diy手工艺品 家庭手工制作 废旧物品手工制作
“HELLO”字符画 自己动手做一个墙面装饰画

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

元宵花灯手工制作 如何自己动手做一个元宵花灯

手工制作
元宵花灯手工制作 如何自己动手做一个元宵花灯

自己动手 结合javascript和dhtml做一个ubb编辑器

ASP
自己动手 结合javascript和dhtml做一个ubb编辑器

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

自己动手做面包做法 自己动手做面包的家常做法

面包粉 烤面包
自己动手做面包做法 自己动手做面包的家常做法

自己用PS做一个简易图标

电脑网络
自己用PS做一个简易图标

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《智龙迷城》攻略之金曜本新人怎么打

《智龙迷城》攻略之金曜本新人怎么打

Flash 神奇遮罩之原理篇(2)

Flash 神奇遮罩之原理篇(2)
下拉加载更多内容 ↓