在一些小型的應用中,完全沒有必要使用大型數(shù)據(jù)庫軟件。自己做一個SQL解釋器就能用數(shù)據(jù)庫的方式來管理了。
這個解釋器,能解釋常用的SQL命令。你可以自行添加其他功能。

<?php
class DB_text { " /> 伊人久综合,jaPanesmature儿母,北条麻妃久久99精品

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

自己動手做一個SQL解釋器

自己動手做一個SQL解釋器
在一些小型的應用中,完全沒有必要使用大型數(shù)據(jù)庫軟件。自己做一個SQL解釋器就能用數(shù)據(jù)庫的方式來管理了。
這個解釋器,能解釋常用的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的輔助函數(shù)
   */
  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 *(,?.*=.*)+( +where +(.+))",$query,$regs);
    $regs[2] = eregi_replace(",","=",$regs[2]);
    $v = split("=",$regs[2]);
    $keys = $this->_where($regs[4],"/$this->conn[$regs[1]]");
    while(list($key,$value) = each($keys)) {
      for($i=0;$i<count($v);$i+=2)
        $this->conn[$regs[1]][$value][$v[$i]] = eregi_replace("'","",$v[$i+1]);
    }
    $this->_close();
  }
  function _delete($query) {
    eregi("delete +from +([0-9a-z_]+) *(where +(.+))?",$query,$regs);
    $keys = $this->_where($regs[3],"/$this->conn[$regs[1]]");
    while(list($key,$value) = each($keys)) {
      unset($this->conn[$regs[1]][$value]);
    }
    reset($this->conn[$regs[1]]);
    while(list($key,$value) = each($this->conn[$regs[1]])) {
      $ch[] = $value;
    }
    $this->conn[$regs[1]] = $ch;
    $this->_close();
  }
  function _where($search,$table) {
    $search = eregi_replace("/("," ( ",$search);
    $search = eregi_replace("/)"," ) ",$search);
    $search = eregi_replace("/+"," + ",$search);
    $search = eregi_replace("/*"," * ",$search);
    while(eregi("[^ ]([*/><!=-])",$search,$regs)) {
      $search = eregi_replace($regs[1]," $regs[1] ",$search);
    }
    while(eregi("([><!] +=)",$search,$regs)) {
      $search = eregi_replace($regs[1],eregi_replace(" ","",$regs[1]),$search);
    }
    $search = eregi_replace("  "," ",trim($search));
    $search = eregi_replace(" and "," && ",$search);
    $search = eregi_replace(" or "," || ",$search);
    $search = eregi_replace(" = "," == ",$search);
    $ar = split(" ",$search);
    eval("/$t=$table;");

    for($i=0;$i<count($ar);$i++) {
      if(isset($t[0][$ar[$i]]))
        $ar[$i] = "/$value[".$ar][$i]."]";
    }
    $expr = "/$expl=(".join(" ",$ar).");";

    while(list($key,$value) = each($t)) {
      eval($expr);
      if($expl)
        $keys[] = $key;
    }
    return $keys;
  }
  function _sort(&$ar,$key=0,$mode="desc") {
    global $cmp_key;
    $cmp_key = $key;
    if($mode == "asc")
      usort($ar,_cmp_asc);
    else
      usort($ar,_cmp_desc);
  }
  function _close() {
    $fp = fopen($this->database,"w");
    fwrite($fp,serialize($this->conn));
    fclose($fp);
  }
}

/** 排序鍵
*/
$cmp_key = "";

/** 排序用工作函數(shù)(降序 由usort()調(diào)用)
*/
function _cmp_desc($a,$b) {
  global $cmp_key;
  if ($a[$cmp_key] == $b[$cmp_key]) return 0;
  return ($a[$cmp_key] > $b[$cmp_key]) ? -1 : 1;
}

/** 排序用工作函數(shù)(升序 由usort()調(diào)用)
*/
function _cmp_asc($a,$b) {
  global $cmp_key;
  if ($a[$cmp_key] == $b[$cmp_key]) return 0;
  return ($a[$cmp_key] > $b[$cmp_key]) ? 1 : -1;
}
?>

測試例:
<pre>
<?php
//require_once "db_text.php";

$conn = new DB_text;
$conn->connect("text1.txt");

$conn->query("insert into manage (id,title) values (10,'abcd')");
$conn->query("insert into manage (id,title) values (2,'43d')");
$conn->query("insert into manage (id,title) values (20,'tuu')");
$conn->query("update manage set id=101,test='a' where id=10");
//$conn->query("delete from manage where id='10'");
//$conn->query("delete from manage where id=10 or table='code'");


//$rt = $conn->query("select * from manage where id=101 or table='code' group by 1 order by 1 asc");
$rt = $conn->query("select * from manage group by 1 order by id desc");

print_r($rt);

?>
</pre>

php技術(shù)自己動手做一個SQL解釋器,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 成年人国产视频 | 欧美xx69 | 国产蜜臀AV在线一区视频 | 99re久久这里只有精品 | 伦理79电影网在线观看 | 大胸美女被C得嗷嗷叫动态图 | 5278欧美一区二区三区 | 亚洲黄视频在线观看 | 打卡中国各地奋斗第一线 | 精品国产在线国语视频 | 让男人玩尿道的女人 | 色婷婷狠狠97成为人免费 | 一品道门在线观看免费视频 | 一道本无吗d d在线播放 | 国产亚洲精品久久综合阿香 | 99热婷婷国产精品综合 | 中文字幕 亚洲 有码 在线 | 欧美尤物射精集锦 | 婷婷亚洲五月色综合久久 | 欧美亚洲精品一区二三区8V | MELODY在线播放无删减 | 日本高清免费在线观看 | 亚洲成A人片在线观看中文L | 国产精品福利电影 | 777琪琪午夜理论电影网 | 国产婷婷一区二区在线观看 | 脱jk裙的美女露小内内无遮挡 | 狠狠干.in | 中文字幕蜜臀AV熟女人妻 | 西西人体大胆牲交PP6777 | 亚洲成色WWW久久网站夜月 | 久久性色AV亚洲电影无码 | 欧美特级特黄AAAAA片 | 久久re热线视频国产 | 亚洲国产精品嫩草影院 | 丹麦1o一19sex性hdhd | 亚洲精品乱码久久久久久中文字幕 | 婷婷五月久久丁香国产综合 | 无人区尖叫之夜美女姐姐视频 | 扒开老师大腿猛进AAA片软件 | 国产一级毛片在线 |