微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有一个用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之外,它不提供任何东西:没有字段名,子查询提取等.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐