当前位置:数据库 > SQLServer >>

以mysql方式操作文本数据库

以mysql方式操作文本数据库
代码
<?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 *(,?.*=.*)+( +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 = "";

/** 排序用工作函数(降序 由usort()调用)
*/
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;
}

/** 排序用工作函数(升序 由usort()调用)
*/
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>
补充:综合编程 , 安全编程 ,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,