function SQL语句解析函数($sql) {
global $db,$MetaTables;
//判断自定义表是否存在,如果不存在直接返回
//判断是否是联合全操作,是否有子查询,是否用left
//如果有,则表示为手写SQL代码,不是系统生成,则直接返回,不进行过滤
$sql = trim($sql);
$sqllower = strtolower($sqllower);
if(substr($sqllower,0,strlen("create table"))=="create table") {
return $sql;
}
if(substr($sqllower,0,strlen("drop table"))=="drop table") {
return $sql;
}
if(substr($sqllower,0,strlen("check table"))=="check table") {
return $sql;
}
if(substr($sqllower,0,strlen("optimize table"))=="optimize table") {
return $sql;
}
if(substr($sqllower,0,strlen("repair table"))=="repair table") {
return $sql;
}
if(substr($sqllower,0,strlen("analyze table"))=="analyze table") {
return $sql;
}
//进行关键字过滤
$sql = eregi_replace(" From "," from ",$sql);
$sql = eregi_replace(" FROM "," from ",$sql);
$sql = eregi_replace(" Where "," where ",$sql);
$sql = eregi_replace(" WHERE "," where ",$sql);
$sql = eregi_replace(" Select "," select ",$sql);
$sql = eregi_replace(" SELECT "," select ",$sql);
$sql = eregi_replace(" Order By "," order by ",$sql);
$sql = eregi_replace(" ORDER BY "," order by ",$sql);
$sql = eregi_replace(" Update "," update ",$sql);
$sql = eregi_replace(" UPDATE "," update ",$sql);
$sql = eregi_replace(" Delete "," delete ",$sql);
$sql = eregi_replace(" DELETE "," delete ",$sql);
$sql = eregi_replace(" Limit "," limit ",$sql);
$sql = eregi_replace(" LIMITE "," limit ",$sql);
$sql = eregi_replace(" Left "," left ",$sql);
$sql = eregi_replace(" LEFT "," left ",$sql);
//处理SELECT
if(substr($sql,0,strlen("select "))=="select ") {
$FromArray = explode(" from ",$sql);
//分析旧的SQL
if($FromArray[1]!="") {
$FromSelectArray = explode("select ",$FromArray[0]);
$SQLArray['SelectText'] = $FromSelectArray[1];
$FromWhereArray = explode(" where ",$FromArray[1]);
$SQLArray['FromText'] = $FromWhereArray[0];
//如果是两个表,直接返回,不做处理
$FromTablesArray = explode(",",$SQLArray['FromText']);
if($FromTablesArray[1]!='') {
print "两个表";
return $sql;
}
//拆分数据库和表
$FromDBArray = explode(".",$SQLArray['FromText']);
if($FromDBArray[1]!="") {
$SQLArray['FromText'] = $FromDBArray[1];
$SQLArray['DBText'] = $FromDBArray[0];
}
$SQLArray['WhereText'] = $FromWhereArray[1];
$FromOrderByArray = explode(" order by ",$SQLArray['WhereText']);
if($FromOrderByArray[1]!="") {
$SQLArray['WhereText'] = $FromOrderByArray[0];
$SQLArray['OrderByText']= $FromOrderByArray[1];
}
}
//处理新的SQL,之前要进行判断表自定义表是否存在
$TABLENAME = $SQLArray['FromText'];
$TABLENAME2 = "view_".$TABLENAME;
if(in_array($TABLENAME2,$MetaTables)) {
//自定义表存在
$MetaColumnNames = $db->MetaColumnNames($TABLENAME);
$MetaColumnNames = array_keys($MetaColumnNames);
$原表主键 = $MetaColumnNames[0];
$MetaColumnNames2 = $db->MetaColumnNames($TABLENAME2);
$MetaColumnNames2 = array_keys($MetaColumnNames2);
$新表主键 = $MetaColumnNames2[0];
array_shift($MetaColumnNames2);
$自定义表字段列表 = join(',',$MetaColumnNames2);
$SQLArray['SelectText'] .= ",".$自定义表字段列表;
$SQLArray['FromText'] .= ",".$TABLENAME2;
if($SQLArray['WhereText']!="") {
$SQLArray['WhereText'] .= " and ".$TABLENAME.".".$原表主键."=".$TABLENAME2.".".$新表主键."";
}
else {
$SQLArray['WhereText'] = " ".$TABLENAME.".".$原表主键."=".$TABLENAME2.".".$新表主键."";
}
}
else {
//不存在,直接返回
return $sql;
}
//形成新的SQL文件
$NEWTEXTSQL = "select ".$SQLArray['SelectText']." from ".$SQLArray['FromText']."";
if(TRIM($SQLArray['WhereText'])!="") {
$NEWTEXTSQL .=" where ".$SQLArray['WhereText'];
}
if(TRIM($SQLArray['OrderByText'])!="") {
$NEWTEXTSQL .=" order by ".$SQLArray['WhereText'];
}
//形成后返回
return $NEWTEXTSQL;
//SELECT 部分结束
}
//UPDATE
//DELETE
//INSERT INTO
print_R($NEWTEXTSQL);
print_R($SQLArray);
} 0
0
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。
289
2026.02.06
本专题汇总了快手网页版的最新入口地址和电脑版使用方法,详细提供快手官网直接访问链接、网页端操作教程,以及如何无需下载安装直接观看短视频的方式,帮助用户轻松浏览和观看快手短视频内容。
150
2026.02.06
本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。
11
2026.02.06
本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。
7
2026.02.06
本专题深入讲解 JavaScript 异步编程与事件驱动架构,涵盖 Promise、async/await、事件循环机制、回调函数、任务队列与微任务队列、以及如何设计高效的异步应用架构。通过多个实际示例,帮助开发者掌握 如何处理复杂异步操作,并利用事件驱动设计模式构建高效、响应式应用。
11
2026.02.06
热门下载
精品课程
共12课时 | 0.6万人学习
共10课时 | 0.8万人学习
共1课时 | 0.3万人学习




