2016-10-07 6 views
0

私は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は」]のようになりますphpのために今単一のフィールド にHTMLフォーム例えば2345,7654,8976と、データベースから複数のロール番号を検索しようとしています=> '2345'、 '7654'、 '8976' クエリで使用する前に、これを=> '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)"; 

に非常にかかわらず、そのアプローチを落胆。

あなたのクエリ引用した次のようになります。

2345,7654,8976一つの値ではなく、3つの値が可能
SELECT `firstname`, `lastname`, `roll`, `board`, `city` FROM `result` WHERE 1=1and IN ('2345,7654,8976')