0

i am trying to search multiple roll numbers from database with html form e.g 2345,7654,8976 in a single field now for php i am trying

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

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

but $_POST['mroll'] will be like this => 2345,7654,8976 for sql i have to quote them like this => '2345','7654','8976' before using it in query please help.

1 Answers1

2

Since the values are integers if you unquote the variable the query will be valid. This will open you to SQL injections though. You should use a parameterized query and pass each value in as a placeholder. Try something like:

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

Demo: https://eval.in/657610

Technically you could just change:

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

to

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

highly discourage that approach though.

Your query when quoted becomes:

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

which makes 2345,7654,8976 one value, not three values.

chris85
  • 23,846
  • 7
  • 34
  • 51