2010-03-24 3 views
0

PHP/MySQL로 개발 된 문제점 관리 시스템에서 작업하고 있습니다. 사용자가 검색 매개 변수를 언급하고이 매개 변수에 따라 시스템이 결과 집합을 반환하는 검색 기능이 필요합니다.함수 인수를 사용하여 동적으로 쿼리 생성

이 문제를 해결하려면 함수를 작성하려고하는데 모든 사용자 선택 매개 변수가 인수로 전달됩니다. 인수를 기반으로 동적으로 쿼리를 생성합니다. 때로는 (사용자가 선택한 것을 기준으로) 이러한 인수 중 하나 이상이 null 일 수 있습니다.

샘플 쿼리 :
나는 또한 인수가 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 ('') 
     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 ''; 

. 예를 들어

: 나는 또한 또한 프로젝트의 다른 장소에서 같은 기능을 사용할 계획입니다

 
    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 ''; 

. 사용자의 모든 티켓 또는 지정된 날짜 사이에 생성 된 모든 티켓을 표시하는 것처럼 ...

이 상황을 어떻게 처리합니까?
이 모든 기능 또는 수많은 기능을 처리하는 단일 기능을 사용해야합니까? 여기에 안내가 필요합니다.

답변

1

사용자 검색 쿼리를 mysql 쿼리로 직접 변환하는 것이 좋은 생각이라고 생각하지 않습니다. 기본적으로 SQL 주입에 대해 더욱 취약 해집니다.

나는 PHP ActiveRecord처럼 어쩌면 검색 당신이 @author Peter 또는 Sam | Martha를 통해 조회 할 수 있습니다 자신의 고급 쿼리 모드의이 Sphinx 같은 전체 텍스트 검색 엔진 추상화 계층을 사용하는 것이 좋습니다.

+0

를 내가 검색 기능을 제거하더라도를 그림에서, 나는 여전히 질문에 대한 해답을 가질 필요가있다 ....... 1. 나에게 할당 된 모든 이슈를 보여주고 status = 'open'또는 2. 내가 주어진 프로젝트의 모든 이슈 ast 달은 나에게 할당되고, 열린다. .. 등등. 그래서 나는 이것들을 위해 아직도 기능을 가질 필요가있다. – Varun

+0

Sphinx는 인덱스 된 컬럼에 대한 기준을 지정할 수 있기 때문에 MySQL을 통해 전체 텍스트 검색을 할 수 있습니다. MySQL은 여기에 적합합니다. 대부분의 티켓 시스템은 RDBMS를 사용합니다. trac는 sqlite를 사용합니다. –

관련 문제