Abdush Samad Miah
Abdush Samad Miah

Reputation: 316

PHP/PDO Select from columns multiple conditions

I am trying to obtain results for a given member where status is pending or accepted doing the below:

$status1 = "Pending";
$status2 = "Attended";
$query = $conn->prepare('SELECT * FROM members WHERE member_id=:mID AND status=:status1 OR status=:status2');
$query->execute(array(':mID' => $mID,':status1' => $status1, ':status2' => $status2));
if ($query->rowCount() > 0) {
   //start to create my table    
   while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
   //create variable, loop through and fill the table etc
   }
}else{
   echo "something";
}

This displays data - however, it even obtains results not specific to the member id (mID). Meaning other members data too!

I'm clearly missing something and or my query is wrong but struggling to find anything..

Any help appreciated.

Upvotes: 0

Views: 1087

Answers (1)

Alex Howansky
Alex Howansky

Reputation: 53646

You need to look at operator precedence for your database. You're doing this:

SELECT * FROM members WHERE member_id = :mID AND status = :status1 OR status = :status2;

Which most likely results in this:

SELECT * FROM members WHERE (member_id = :mID AND status = :status1) OR status = :status2;

But that's not what you want, so you will have to explicitly use parens like this:

SELECT * FROM members WHERE member_id = :mID AND (status = :status1 OR status = :status2);

Alternatively, you can use IN so that there's no OR:

SELECT * FROM members WHERE member_id = :mID AND status IN (:status1, :status2);

Upvotes: 6

Related Questions