2016-10-07 40 views
0

我試圖在單場 現在從HTML形式,例如2345,7654,8976數據庫搜索多個卷號爲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 [「mroll」]將會怎樣這= = 2345,7654,8976 對於SQL我必須引用他們這樣=>'2345','7654','8976' 之前使用它在查詢 請幫助。

+1

整數不需要引用。儘管你已經開放了SQL注入。我不推薦這個,但'和滾入($ mroll)'會工作。 – chris85

+0

哪些數據類型是列滾動? – scaisEdge

+0

'爆炸(「‘$ _ POST [’mroll」])' – Pete

回答

1

由於值是整數,如果您取消引用該變量,該查詢將是有效的。這會爲您打開SQL注入。您應該使用參數化查詢並以佔位符形式傳遞每個值。嘗試是這樣的:

$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)"; 
} 

演示:https://eval.in/657610

從技術上講,你可以只改變:

$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一個值,而不是三個值。