sky*_*gle 6 php sql postgresql
在我自己动手之前,我想我应该先在这里问一下。
我希望对随机 SQL 命令进行一些基本解析,以便:
我见过一些 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
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我希望解析尽可能与 SQL 方言无关(即不依赖于任何特定的 SQL 方言或数据库特定的 SQL)。
如果这是不可能的,那么我将使用的 SQL 方言是 PostgreSQL。
PHP SQL 解析器可能就是您正在寻找的。正如您从链接中看到的,它将处理相当复杂的查询。从项目首页下载代码。唯一的缺点是它仅针对 MySQL。添加对 PostgreSQL 的支持应该不是什么大问题。
还有一个更基本的 SQL 解析解决方案:PHP SQL Tokenizer,但它除了 select/from/where/order 分离之外什么都不提供:没有字段名称、子查询提取等。
| 归档时间: |
|
| 查看次数: |
4526 次 |
| 最近记录: |