PHP:在 yii 中创建更高级别的查询语言以创建条件过滤器的最佳方法是啥
Posted
技术标签:
【中文标题】PHP:在 yii 中创建更高级别的查询语言以创建条件过滤器的最佳方法是啥【英文标题】:PHP: What is the best way to create higher level query language to create criteria filter in yiiPHP:在 yii 中创建更高级别的查询语言以创建条件过滤器的最佳方法是什么 【发布时间】:2015-08-23 05:43:38 【问题描述】:我在 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。有没有更好的办法?
【问题讨论】:
Regexp 不是一个好的解决方案,改用词法分析器 @MarkBaker 感谢您的回复。你知道我应该去做什么吗?我不知道如何开始。 创建表单输入,否则用户可能会出错。 【参考方案1】:由于 SQL 的灵活性以及安全性,您需要使用词法分析器。通过这种方式,您可以进行非常复杂的查询,验证每个字段和值,并提供有用的错误反馈。我能想到两个不错的选择:
如果用户输入相对简单(例如,没有子选择),使用已经用 PHP 编写的词法分析器(如 Phlexy)定义您想要支持的查询集应该不会花很长时间。
如果您需要更强大的 SQL 支持,我会推荐 Antlr,因为它已经支持各种形式的 SQL。缺点是 PHP 目前似乎不是受支持的目标语言,因此集成会更加困难。
【讨论】:
以上是关于PHP:在 yii 中创建更高级别的查询语言以创建条件过滤器的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章