PHP / PDO从列中选择多个条件

时间:2018-08-01 19:51:42

标签: mysql operators

我正在尝试通过以下方式获取状态为待定或被接受的给定成员的结果:

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

这将显示数据-但是,它甚至获得的结果并非特定于成员ID(mID)。也意味着其他成员的数据!

我显然遗漏了一些东西,或者我的查询错了,但是却很难找到任何东西。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:5)

您需要查看数据库的运算符优先级。您正在执行此操作:

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

这最有可能导致以下结果:

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

但这不是您想要的,因此您将必须显式使用如下的括号:

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

或者,您可以使用IN这样就没有OR

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