PHP:在PHP中创建高级查询语言来创建条件过滤器的最佳方式是什么?


PHP: What is the best way to create higher level query language to create criteria filter in yii

我在mysql数据库。在php应用程序上,我想创建一个文本区,并允许用户编写一个"查询"来过滤表上的数据。

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

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

就像这样。这是用户输入并按下搜索按钮的内容,系统将根据用户提供的"查询"创建sql查询,并返回过滤后的结果。在上面的示例中,它将创建如下sql查询:

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

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

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

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

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