Php 使用函数参数动态生成查询

Php 使用函数参数动态生成查询,php,mysql,Php,Mysql,我正在开发一个用PHP/MySQL开发的问题管理系统。 它需要搜索功能,用户将提及搜索参数,系统将根据这些参数返回结果集 为了解决这个问题,我尝试编写一个函数,所有用户选择的参数都作为参数传递。基于这些参数,我将动态生成查询。有时(根据用户的选择),这些参数中的一个或多个可以为null 示例查询: select * from tickets inner join ticket_assigned_to on tickets.id=tick

我正在开发一个用PHP/MySQL开发的问题管理系统。 它需要搜索功能,用户将提及搜索参数,系统将根据这些参数返回结果集

为了解决这个问题,我尝试编写一个函数,所有用户选择的参数都作为参数传递。基于这些参数,我将动态生成查询。有时(根据用户的选择),这些参数中的一个或多个可以为null

示例查询:
select * from tickets inner join ticket_assigned_to on tickets.id=ticket_assigned_to.ticket_id where tickets.project_id= in ('') and tickets.status in ('') and ticket_assigned_to.user_id in ('') and tickets.reporter_user_id='' and tickets.operator_user_id in ('') and tickets.due_date between '' and '' and tickets.ts_created between '' and ''; 从中选择* 票 分配给的内部联接票证 在票证上。id=分配给的票证。票证id 哪里 票证。项目id=in(“”) 和票证。状态在(“”) 和票证分配给(“”)中的用户id 和票。记者\用户\ id=“” 和tickets.operator\u user\u id in(“”) 和票。到期日在“”和“”之间 以及在“”和“”之间创建的tickets.ts_;

我还需要处理在查询中可以对参数进行or或AND运算的情况

例如:

select * from tickets inner join ticket_assigned_to on tickets.id=ticket_assigned_to.ticket_id where tickets.project_id= in ('') and tickets.status in ('') or tickets.due_date = '' or tickets.ts_created between '' and ''; 选择* 从…起 票 分配给的内部联接票证 在票证上。id=分配给的票证。票证id 哪里 票证。项目id=in(“”) 和票证。状态在(“”) 或门票。到期日=“” 或在“”和“”之间创建的tickets.ts_; 我还计划在项目的其他地方使用相同的功能。 要显示用户的所有票据或在给定日期之间创建的所有票据,等等

如何处理这种情况?
我应该使用一个单独的函数来处理所有这些还是许多小函数?
这里需要指导。

我不认为直接将users serach查询转换为mysql查询是个好主意。基本上,您只是变得更容易受到SQL注入的攻击

我建议使用一个抽象层,如and,用于搜索,可能是一个全文搜索引擎,如它有自己的高级查询模式,您可以通过
@author Peter
Sam | Martha

来建立查询条件

链接不是特定于PHP的,但希望能传达您如何建立
WHERE
标准:



谷歌图书结果-

即使我从图片中删除了搜索功能,我仍然需要回答以下问题:。。。。。。。1.显示分配给我且状态为“打开”或2的所有问题。从上个月开始创建的给定项目中的所有问题都分配给我并打开。。。等等所以我仍然需要这些函数。Sphinx可以在MySQL上进行全文搜索,因为他可以为索引列指定条件,MySQL适合这里。大多数票证系统使用RDBMS,例如trac使用sqlite