2012-06-14 1 views
0

와일드 카드 검색을 사용하여 org_name 필드의 모든 텍스트를 선택하고 1이있는 INT 필드를 선택하려고하면 양식에 입력됩니다.와일드 카드를 사용하여 varchar 및 INT 필드가있는 모든 데이터베이스 검색 mysql 쿼리

E, G 누군가 유형 보모는 형태로 나는 ... 결과에 표시하는 데에 1 탁아모의 INT 필드의 모든 레코드를 원하는 경우

$sql_result= "SELECT * FROM table WHERE org_name LIKE '%" . $org_name . "%' 

OR carer LIKE '1' 
OR childminder LIKE '1' "; 

답변

0

아니 당신이 왜 확인 그러한 일은 있지만 수동 쿼리 연결의 후보와 비슷합니다 (힌트 : 이렇게하지 마세요.) PDO는 바인딩 열 이름을 지원하지 않으므로 라이브러리/기타 입증 된 솔루션의 도움이 필요하다면 운이 없게됩니다.

업데이트

스키마가 변경되지 않으며, 당신은 당신이 ("정합 가능한") 열을 검색 쿼리 및 사용할 수의 배열을 받아이를 처리 할 일부 일치하는 메커니즘을 가질 수 SQLI이 염려되는 경우, 일치하는 항목보고 그런 다음 안전한 데이터를 쿼리하면됩니다. 샘플 코드 :

$columns = array(/* ... */); 
$query = '/* ... */'; 
$matches = array(); 
foreach($columns as $column) 
    { 
    if(preg_match('/'.$column.'/', $query)) 
     { 
     $matches[] = $column; 
     } 
    } 

$sqlQuery = 'you select'; 
foreach($matches as $match) 
    { 
    $sqlQuery .= ' OR '.$match.' = 1'; 
    } 

정확한 코드는 아니지만 아이디어를 얻을 수 있습니다.

+0

고통이 있지만 데이터베이스를 변경할 수 없다는 점에서 제한적입니다. 나는 또한 주사 공격에 대해 매우 우려하고 있습니다. – Stephen

+0

내 업데이트를 참조하십시오. –

+0

고마워요.하지만 제 설정대로 구현할 수있는 방법에 대해서는 분실했습니다. 전체 코드를 게시 할 수 있습니까? – Stephen

관련 문제