我在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)

我正在考虑使用正则表达式解析此查询并从中创建sql。有没有更好的办法?

最佳答案

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

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

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

10-08 20:13
查看更多