在进入并推动我自己之前,我想我先在这里问.
>检查’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 举报,一经查实,本站将立刻删除。