分享
 
 
 

mysql方式操作文本数据库

王朝mysql·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

在一些小型的应用中,完全没有必要使用大型数据库软件。自己做一个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 *(,?.*=.*)+( +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;

}

?>

测试例:

<?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);

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有