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

Abd*_*iah 0 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";
}
Run Code Online (Sandbox Code Playgroud)

这会显示数据 - 但是,它甚至会获得不特定于成员标识(mID)的结果.其他成员的数据也是如此!

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

任何帮助赞赏.

Ale*_*sky 5

您需要查看数据库的运算符优先级.你这样做:

SELECT * FROM members WHERE member_id = :mID AND status = :status1 OR status = :status2;
Run Code Online (Sandbox Code Playgroud)

最有可能的结果是:

SELECT * FROM members WHERE (member_id = :mID AND status = :status1) OR status = :status2;
Run Code Online (Sandbox Code Playgroud)

但那不是你想要的,所以你必须明确地使用这样的parens:

SELECT * FROM members WHERE member_id = :mID AND (status = :status1 OR status = :status2);
Run Code Online (Sandbox Code Playgroud)

或者,你可以使用,IN所以没有OR:

SELECT * FROM members WHERE member_id = :mID AND status IN (:status1, :status2);
Run Code Online (Sandbox Code Playgroud)