热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

自己动手做一个SQL解释器

自己动手做一个SQL解释器在一些小型的应用中,完全没有必要使用大型数据库软件。自己做一个SQL解释器就能用数据库的方式来管理了。这个解释器,能解释常用的SQL命令。你可以自行添加其他功能。<?php(做为现在的主流开发语言)classDB_SyntaxHighlighter
自己动手做一个SQL解释器
在一些小型的应用中,完全没有必要使用大型数据库软件。自己做一个SQL解释器就能用数据库的方式来管理了。
这个解释器,能解释常用的SQL命令。你可以自行添加其他功能。

(做为现在的主流开发语言)
class DB_text &#123;
  var &#36;conn;
  var &#36;classname = "db_text";
  var &#36;database;
  function on_create() &#123;
  &#125;
  function connect(&#36;database_name) &#123;
    &#36;this->database = &#36;database_name;
    if(! file_exists(&#36;database_name)) &#123;
      &#36;this->cOnn= array();
      &#36;this->_close();
    &#125;
    &#36;fp = fopen(&#36;this->database,"r");
    &#36;this->cOnn= unserialize(fread(&#36;fp,filesize(&#36;this->database)));
    fclose(&#36;fp);
  &#125;
  function &query(&#36;query) &#123;
    if(eregi("select ",&#36;query)) return &#36;this->_select(&#36;query);
    if(eregi("insert ",&#36;query)) return &#36;this->_insert(&#36;query);
    if(eregi("delete ",&#36;query)) return &#36;this->_delete(&#36;query);
    if(eregi("update ",&#36;query)) return &#36;this->_update(&#36;query);
    return array();
  &#125;
  function fetch_row(&&#36;result) &#123;
    if(list(&#36;key,&#36;value) = each(&#36;result))
      return &#36;value;
    return false;
  &#125;
  function num_rows(&#36;result) &#123;
    return count(&#36;result);
  &#125;

  /**
   * query的辅助函数
   */
  function _select(&#36;query) &#123;
    if(eregi("(order by (.+))",&#36;query,&#36;regs)) &#123;
      &#36;order = &#36;regs[2];
      &#36;query = eregi_replace(&#36;regs[1],"",&#36;query);
    &#125;
    if(eregi("(group by (.+))",&#36;query,&#36;regs)) &#123;
      &#36;group = &#36;regs[2];
      &#36;query = eregi_replace(&#36;regs[1],"",&#36;query);
    &#125;
    eregi("select .* from ([0-9a-z_]+) *(where +(.+))?",&#36;query,&#36;regs);
    if(&#36;regs[3] != "") &#123;
      &#36;keys = &#36;this->_where(&#36;regs[3],"&#36;this->conn[&#36;regs[1]]");
      while(list(&#36;key,&#36;value) = each(&#36;keys)) &#123;
        &#36;rs[] = &#36;this->conn[&#36;regs[1]][&#36;value];
      &#125;
    &#125;else &#123;
      &#36;rs = &#36;this->conn[&#36;regs[1]];
    &#125;
    if(&#36;order) &#123;
      sscanf(&#36;order,"%s %s",&#36;key,&#36;type);
      if(empty(&#36;type)) &#36;type = "asc";
        &#36;this->_sort(&#36;rs,&#36;key,&#36;type);
    &#125;
    return &#36;rs;
  &#125;
推荐阅读
author-avatar
iainabaobei_151
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有