是否有一个用PHP编写的轻量级sql解析器类来执行此操作?

在进入并推动我自己之前,我想我先在这里问.

我希望对随机sql命令进行一些基本解析,以便:

>检查’SELECT’中使用的字段名称(包括任何子查询)
>检查’JOIN’中使用的字段名称(包括任何子查询)
>检查查询中使用的表的名称(包括任何子查询)

我已经看到了一些sql解析器类,但它们对于上述用例来说太“重量级”了.

是否有人知道轻量级类至少具有一些必需的功能

最糟糕的情况是,如果我必须编写一个解析器,那么编写这样一个解析器的最佳方法是什么(通常,编写一个解析器,我通常会使用PHP中没有的工具),任何提示如何写一个’粗略和准备’的类来做这个解析?

//rough sketch
<?PHP
class sqlParser()
{
    protected $sqlstr;
    protected $m_tablenames = array();
    protected $m_fieldnames = array();

    public function __construct($sql){
       $this->sqlstr = $sqlcmd;
       $this->parseString($sqlstr);
    }

    public function __destroy(){}
    public function getTableNames(){ return m_tablenames; }
    public function getFieldNames(){ return m_fieldnames; }

    private function parseString($sql)
    {
        //Todo
    }
}

?>

我希望尽可能地将解析与sql方言无关(即不依赖于任何特定的sql方言或数据库特定的sql).

如果那是不可能的,那么我将使用的sql方言是Postgresql.

解决方法:

PHP SQL Parser可能就是你要找的东西.正如您可以从链接中看到的那样,它将处理相当复杂的查询.从项目首页下载代码.唯一的缺点是它只针对MysqL.添加对Postgresql支持应该不是什么大问题.

还有一个更基本的sql解析解决方案:PHP SQL Tokenizer,但除了select / from / where / order separation之外,它不提供任何东西:没有字段名,子查询提取等.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...