2016-10-07 4 views
0

내가 PHP를 위해 내가SQL "IN"절의 PHP 배열?

$query = "SELECT `firstname`, `lastname`, `roll`, `board`, `city` FROM `result` WHERE 1=1"; 

if(isset($_POST['mroll'])) 
{ 
$mroll=$_POST['mroll']; 
$query.="and roll IN ('$mroll')"; 
} 

하지만, $ _POST를 시도하고 지금은 하나의 필드 에 HTML 양식 예를 들어, 2345,7654,8976과 데이터베이스에서 여러 롤 번호를 검색하는 것을 시도하고있다 [ 'mroll']처럼 될 것입니다 this => 2345,7654,8976 for SQL 나는 이것들을 인용해야합니다 => '2345', '7654', '8976' 쿼리에 사용하기 전에 도와주세요.

+1

정수는 따옴표로 묶을 필요가 없습니다. 당신은 비록 SQL 주입에 열려 있습니다. 나는 이것을 추천하지 않지만'and roll IN ($ mroll)'이 효과적이다. – chris85

+0

데이터 형식이 열 롤입니까? – scaisEdge

+0

'explode (',', $ _POST [ 'mroll'])' – Pete

답변

1

변수를 인용 부호로 묶지 않으면 값이 정수이므로 쿼리가 유효합니다. 이것은 SQL 주입에 당신을 열 것이다. 매개 변수화 된 쿼리를 사용하고 각 값을 자리 표시 자로 전달해야합니다. https://eval.in/657610

기술적 방금 변경할 수 있습니다 :

$query = "SELECT `firstname`, `lastname`, `roll`, `board`, `city` FROM `result` WHERE 1=1"; 
if(isset($_POST['mroll'])) { 
    $mroll=$_POST['mroll']; 
    foreach(explode(',', $mroll) as $int) { 
     $placeholders .= '?, '; 
     $params[] = $int; 
    } 
    $placeholders = rtrim ($placeholders, ', '); 
    $query .= " and roll IN ($placeholders)"; 
} 

데모 : 뭔가를 시도

$query.="and roll IN ('$mroll')"; 

$query.="and roll IN ($mroll)"; 

에 매우하지만 그 접근 방식을 억제. 인용

귀하의 질의는된다 :

SELECT `firstname`, `lastname`, `roll`, `board`, `city` FROM `result` WHERE 1=1and IN ('2345,7654,8976') 

2345,7654,8976 하나의 값이 아닌 세 개의 값을 만든다.