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

Jam*_*mol 5 php regex sql filtering criteria

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

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

name="John" AND (age > 20 OR status = 1)
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM users WHERE name="John" AND (age>20 OR status=1)
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*t S 4

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

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

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