作者:iainabaobei_151 | 来源:互联网 | 2014-05-21 20:40
自己动手做一个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;