繁体   English   中英

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

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

我在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。 有没有更好的方法?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM