PHP程序员站--PHP编程开发平台
 当前位置:主页 >> 数据库 >> MySQL >> 

mysql方式操作文本数据库

mysql方式操作文本数据库

来源:互联网  作者:未知  发布时间:2008-01-11
在一些小型的应用中,完全没有必要使用大型数据库软

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


}


/** 排序用工作函数(升序 由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
;


}
?>



测试例:

以下为引用的内容:
<?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
);



?>

Tags: 数据库   sql   mysql   数据   文本    
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号