PHP:创建更高级别查询语言以在yii中创建条件过滤器的最佳方法是什么

时间:2015-06-08 16:32:26

标签: php sql regex filtering criteria

我在mysql中有数据库。在PHP应用程序上,我想创建一个textarea,并允许用户编写一个“查询”来过滤表上的数据。

我想为用户创建一个查询解析器,通过编写查询来过滤数据。例如:

name="John" AND (age > 20 OR status = 1)

像这样的东西。这是用户将键入并按下搜索按钮,系统从用户提供的“查询”中创建sql查询并返回过滤结果。在上面的示例中,它将创建如下的SQL查询:

SELECT * FROM users WHERE name="John" AND (age>20 OR status=1)

我正在考虑使用regex解析此查询并从中创建sql。有没有更好的方法?

1 个答案:

答案 0 :(得分:2)

由于SQL的灵活性以及安全性,您将要使用词法分析器。这样,您可以允许非常复杂的查询,验证每个字段和值,并提供有关错误的有用反馈。我可以想到两个不错的选择:

如果用户输入相对简单(例如没有子选择),那么使用已经用PHP编写的词法分析器(例如Phlexy)定义要支持的查询集不需要花费很长时间。

如果您需要更强大的SQL支持,我建议使用Antlr,因为它已经支持各种形式的SQL。缺点是PHP目前似乎不是支持的目标语言,因此集成将更加困难。

相关问题