RSS订阅
PHP程序员站--WWW.PHPERZ.COM  
网站地图
高级搜索
收藏本站

 当前位置:主页 >> 数据库 >> MySQL >> 文章内容
mysql方式操作文本数据库
[收藏此页[打印本页]   
来源:互联网  作者:未知  发布时间:2008-01-11

在一些小型的应用中,完全没有必要使用大型数据库软件。自己做一个SQL解释器就能用数据库的方式来管理了。
这个解释器,能解释常用的SQL命令。你可以自行添加其他功能。 PHP程序员站

以下为引用的内容:
<?php
class DB_text 
{
var 
$conn
;
var 
$classname "db_text"
;
var 
$database
;

www phperz com


function 
on_create
() {
}
function 
connect($database_name
) {
$this->database $database_name
;
if(! 
file_exists($database_name
)) {
$this->conn 
= array();
$this->_close
(); www~phperz~.com
}
$fp fopen($this->database,"r"
);
$this->conn unserialize(fread($fp,filesize($this->database
)));
fclose($fp
); PHP程序员站--PHP程序员之家
}
function &
query($query
) {
if(
eregi("select ",$query)) return $this->_select($query
);
if(
eregi("insert ",$query)) return $this->_insert($query
); PHP程序员站
if(
eregi("delete ",$query)) return $this->_delete($query
);
if(
eregi("update ",$query)) return $this->_update($query
);
return array();
}
function 
fetch_row(&$result
) {

PHP程序员站--PHP程序员之家


if(list(
$key,$value) = each($result
))
return 
$value
;
return 
false
;
}
function 
num_rows($result
) {
return 
count($result
);
}


/**
* query的辅助函数
*/
function _select($query
) {
PHP程序员站--PHP程序员之家

if(
eregi("(order by (.+))",$query,$regs
)) {
$order $regs[2
];
$query eregi_replace($regs[1],"",$query
);
}
if(
eregi("(group by (.+))",$query,$regs
)) { PHP程序员站--PHP程序员之家
$group $regs[2
];
$query eregi_replace($regs[1],"",$query
);
}
eregi("select .* from ([0-9a-z_]+) *(where +(.+))?",$query,$regs
);
www phperz com

if(
$regs[3] != ""
) {
$keys $this->_where($regs[3],"\$this->conn[$regs[1]]"
);
while(list(
$key,$value) = each($keys
)) {

www~phperz~.com


$rs[] = $this->conn[$regs[1]][$value
];
}
}else {
$rs $this->conn[$regs[1
]];
}
if(
$order
) {
sscanf($order,"%s %s",$key,$type
);

phperz.com


if(empty(
$type)) $type "asc"
;
$this->_sort($rs,$key,$type
);
}
return 
$rs
;
}
function 
_insert($query
) {
eregi("insert +into +([0-9a-z_]+) *(.+) *values? *(.+)",$query,$regs
); phperz.com
eval(
"\$key=array$regs[2];"
);
eval(
"\$value=array$regs[3];"
);
for(
$i=0;$i<count($key);$i
++)
$rs[$key[$i]] = $value[$i
];
www.phperz.com

$this->conn[$regs[1]][] = $rs
;
$this->_close
();
}
function 
_update($query
) {
eregi("update +([0-9a-z_]+) +set *(,?.*=.*)+( +where +(.+))",$query,$regs
);

PHP程序员站--PHP程序员之家


$regs[2] = eregi_replace(",","=",$regs[2
]);
$v split("=",$regs[2
]);
$keys $this->_where($regs[4],"\$this->conn[$regs[1]]"
); phperz.com
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
]);

PHP程序员站--PHP程序员之家


}
$this->_close
();
}
function 
_delete($query
) {
eregi("delete +from +([0-9a-z_]+) *(where +(.+))?",$query,$regs
);
$keys $this->_where($regs[3],"\$this->conn[$regs[1]]"
); phperz.com
while(list(
$key,$value) = each($keys
)) {
unset(
$this->conn[$regs[1]][$value
]);
}
reset($this->conn[$regs[1
]]);

www.phperz.com


while(list(
$key,$value) = each($this->conn[$regs[1
]])) {
$ch[] = $value
;
}
$this->conn[$regs[1]] = $ch
;
phperz.com

$this->_close
();
}
function 
_where($search,$table
) {
$search eregi_replace("\("," ( ",$search
);
$search eregi_replace("\)"," ) ",$search
); www phperz com
$search eregi_replace("\+"," + ",$search
);
$search eregi_replace("\*"," * ",$search
);
while(
eregi("[^ ]([*/><!=-])",$search,$regs
)) { PHP程序员站
$search eregi_replace($regs[1]," $regs[1] ",$search
);
}
while(
eregi("([><!] +=)",$search,$regs
)) {
$search eregi_replace($regs[1],eregi_replace(" ","",$regs[1]),$search
); phperz.com
}
$search eregi_replace(" "," ",trim($search
));
$search eregi_replace(" and "," && ",$search
);
$search eregi_replace(" or "," || ",$search
);

PHP程序员站--PHP程序员之家


$search eregi_replace(" = "," == ",$search
);
$ar split(" ",$search
);
eval(
"\$t=$table;"
);


for(
$i=0;$i<count($ar);$i
++) {

www~phperz~.com


if(isset(
$t[0][$ar[$i
]]))
$ar[$i] = "\$value[".$ar][$i]."]"
;
}
$expr "\$expl=(".join(" ",$ar).");"
;

phperz.com




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


/** 排序键
*/
$cmp_key ""
; PHP程序员站


/** 排序用工作函数(降序 由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
; PHP程序员站
}


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

}
?>



测试例:

以下为引用的内容:
<?php
//require_once "db_text.php";


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

PHP程序员站




$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"
);

www phperz com


//$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
);
PHP程序员站--PHP程序员之家



?>

PHP程序员站--PHP程序员之家


 上一篇:php解析xml文档的类   下一篇:php中 转义符使用小结
 
 相关文章
 
发表评论
全部评论(0条)
 
 站内搜索
 热门搜索 mysql  基础  php基础  url
高级搜索 网站地图 站长工具 IP查询 收藏本站
 热点文章
 随机推荐
网站首页 | 网站地图 | 高级搜索 | RSS订阅
PHP程序员站 Copyright © 2007,PHPERZ.COM All Rights Reserved 粤ICP备07503606号 联系站长